Qt 中的事件-10

tech2023-10-02  86

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、添加一个按钮,点击即暂停

结果如下

最新回复(0)