Qt
中的事件为QEvent
,常用的是点击或移动鼠标来触发事件。
一、Qt
中的鼠标进入和离开事件
如鼠标移入和离开都会有对应的事件,在此使用Label
控件来测试对应的鼠标进入和移出事件。
1、创建自定义Label
控件
因为要通过Label
来实现检测鼠标的进入和移出事件,需要自定义控件。具体是通过对Label
进行封装处理。
在此可以通过C++代码来实现对应的功能,不使用ui
。在当前项目上右键,选择添加新文件,选择如下选项。
自定义类名为myWidget
,基类为QWidget
,将会产生两个文件,分别为: mywidget.h
和mywidget.cpp
2、代码实现对应的控件动作
(1)、mywidget.h
中声明对应函数
(2)、mywidget.cpp
中实现对应函数
(3)、进入到 mainwindow.ui
文件中拖拽Label
控件。因为该控件的类型为QLabel
,要提升为自定义控件的话,必须要保证自定义控件的类与需要提升的控件类型保持一致,由于当前自定义控件与目标控件类型不一致,所以要将自定义控件继承的类从QWidget
修改为QLabel
要修改的地方如下图红色方框所示:
然后对其进行提升,类名为myWidget
,依次点击添加、提升 即可。提升后其类型如下所示。
3、运行结果如下所示
当鼠标进入和移出时,会提示如下所示的信息
二、按下、松开和移动鼠标事件
常用的鼠标事件分别为:mousePressEvent
、mouseReleaseEvent
、mouseMoveEvent
。
运行结果如下图:
【注】:如果希望鼠标只要在Label
上一移动,就会触发对应的事件,则可以设置鼠标追踪为真。
三、定时器事件-方法1
设置定时器的事件QTimerEvent
,定时器的事件就是timerEvent
。它是一个虚函数,可以对其按照自己的需求进行重写操作。
需求:有两个定时器,一个定时器每隔1秒递增一次,另一个计时器每隔2秒递增一次。
- 首先添加两个
Label
控件用来分别显示这两个定时器 label_2
是每隔一秒递增一次;label_3
是每隔2秒递增一次QTimerEvent
中的计时器是通过timerId()
来进行区分哪个计时器执行操作,其返回值为int
类型。
实现代码如下图所示:
运行结果如下图:
四、定时器事件-方法2(推荐)
1、用Timer
类来实现定时器方法一所实现的功能,会在逻辑上更加清晰、独立,也更容易理解。
- 利用定时器类
QTimer
创建定时器对象timer
- 启动定时器
timer->start(interval)
- 每隔一定时间间隔发送信号
timeout
,并进行监听
代码如下:
运行结果如下图:
2、添加一个按钮,点击即暂停
结果如下