初学QT(Day05)

news/2025/3/21 1:23:52/

继续第四天的demo

总结了之前的经验教训,我重新开一个项目项目,先给出demo的结果吧,第一张是第一次写的demo,第二张图是成品的demo
在这里插入图片描述
在这里插入图片描述

结果还是比较满意的,虽然过程中有遇到的问题不是我自己独立解决的。。。相比于第一个demo,提升了鼠标和子控件的配合的灵敏度,同时保证了在鼠标出界的时候,子控件是保持在父窗口中的,同时依然在qt的应用程序输出窗口输出手柄的坐标

说一下中间遇到的坎坷吧:

  • 一开始我是重新定义了一个继承于QLabel的类,在这个类中重写mouseEvent的三个函数,但是结果并不如人意,因为要控制鼠标和这个handle同时移动,同时保持handle保持在主窗口中不能出界,如果在这个继承于QLabel的类中重写鼠标事件,即使是在父窗口中再次重写鼠标事件也无济于事,因为根据QT的机制/规则,如果父窗口和子窗口重写了同一个函数,那么编译器会首先执行子窗口重写的函数,如果子窗口没有重写这个函数,那么就会向上寻找,也就是向这个子控件的父控件寻找,父控件可能不执行也可能覆盖子控件执行的操作,这是非常不规范的。
    所以在这一次的demo中只有一个mainwindow类继承QMainWindow类,在这个类中重写鼠标事件的三个函数,使用isin函数确定鼠标是否在子控件handle中。
  • 在这个demo中,首次尝试使用Pixmap添加背景图片(之前用的是setstylesheet)和使用QRect来寻找控件的中心坐标和左上角的坐标
  • 在使用Pixmap添加背景图片的时候,为了让背景图片填充到控件中,需要使用setScaledContents(1)
  • 还有就是使用信号的问题,我一开始是直接把定时器放到事件中的,但是后来发现不可行。因为如果在事件中执行定时器,那么在这个不断(随时有可能)被调用的事件中定时器就会不断的执行,在定时器中我放的是保证handle和鼠标一起移动的槽函数,所以含义是,鼠标移动一次,handle也跟着移动到相应的位置就可以了(是一对一的),而如果把定时器放到鼠标事件中,显然鼠标移动一次,定时器中的handle移动就会跟着执行多次(就变成一对多了)。那么在这种情况下,定时器就不适用了,我是直接将槽函数放到事件中了(槽函数也是成员函数,可以当成普通的成员函数使用)
  • 另外还需要保证handle不越界,所以在mouseMoveEvent中检测鼠标指向的handle是否越界,第一使用移动函数(槽函数)将鼠标和手柄绑定起来,让手柄跟随鼠标移动(这一步一定是第一步,要不然放到后面的话,检测越界的操作会被覆盖,都是泪),再使用handle的geometry获取手柄的左上角的x,y坐标,判断x,y坐标加上手柄的尺寸是否大于主窗口的尺寸

还有一些话

实际上还有很多问题,时间太长没办法全部记起来,但是重要的地方都记下来了,本来打算明天做一个圆形的手柄,但是今天又发了新任务,感觉难度比较大,可能没时间写了,如果想查看源码练手欢迎访问我的github主页,这是我练习qt的仓库,欢迎大家star


http://www.ppmy.cn/news/105454.html

相关文章

《c++ primer笔记》第十五章 OOP

文章目录 一、概述二、定义基类和派生类2.1定义基类2.2定义派生类2.3类型转换与继承 三、虚函数四、抽象基类五、访问控制与继承六、继承中类作用域七、构造函数与拷贝控制7.1虚析构函数7.2合成拷贝控制与继承7.3派生类的拷贝控制成员7.4继承的构造函数 八、容器与继承8.1Baske…

Python过滤信息,如省位中包含广东、安徽、浙江这3个省份的话,就pass,怎么破?...

点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 但令心似金钿坚,天上人间会相见。 大家好,我是皮皮。 一、前言 前几天遇到了一个小问题,在做资料的时候&#xff0c…

华为OD机试真题B卷 Java 实现【旋转数组的最小数字】,附详细解题思路

一、题目描述 有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。 二、输入描述 3,4,5,1,2 …

<Linux>《网站状态码大全》

《网站状态码大全》 2开头3开头4开头5开头1xx 信息提示2xx 成功3xx 重定向4xx 客户端错误5xx 服务器错误 2开头 2开头(请求成功)表示成功处理了请求的状态代码。200(成功) 服务器已成功处理了请求。 通常,这表示服务器…

python异常处理速通

一.异常处理认识 1.基础认识 开发人员在编写程序时,难免会遇到错误,有的是编写人员疏忽造成的语法错误,有的是程序内部隐含逻辑问题造成的数据错误,还有的是程序运行时与系统的规则冲突造成的系统错误,等等。总的来说…

Microsoft Build 2023 After Party - 上海站

点击蓝字 关注我们 编辑:Alan Wang 排版:Rani Sun 微软 Reactor 为帮助广开发者,技术爱好者,更好的学习 .NET Core, C#, Python,数据科学,机器学习,AI,区块链, IoT 等技术&#xff0…

结束了

阅读本文大概需要 1.29 分钟。 帅张读书会,结束了。 这里也简单记录一下这件事,毕竟是自己做了两年的产品。 经过两年的时间,自 2021 年 5 月 27 日至 2023 年 5 月 27 日,帅张读书会这个项目持续了两期,第二期现在结束…

.net 混淆工具

obfuscation tools .net 社区有很多混淆工具, 比如这个清单: https://github.com/NotPrab/.NET-Obfuscator 比较有名的商业工具有 .NET REACTOR https://www.eziriz.com/, 开源软件中, 最受欢迎的有: obfuscar https://github.com/obfuscar/obfuscar老版 ConfuserEx https://gi…