【Qt】事件


1 🍑事件介绍🍑

事件是应⽤程序内部或者外部产⽣的事情或者动作的统称。在 Qt 中使⽤⼀个对象来表⽰⼀个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本⾝在不同的时刻发出的。当⽤⼾按下⿏标、敲下键盘,或者是窗⼝需要重新绘制的时候,都会发出⼀个相应的事件。⼀些事件是在⽤⼾操作时发出,如键盘事件、⿏标事件等,另⼀些事件则是由系统本⾝⾃动发出,如定时器事件。常⻅的 Qt 事件如下:

在这里插入图片描述
常⻅事件描述:

事件名称描述
⿏标事件⿏标左键、⿏标右键、⿏标滚轮,⿏标的移动,⿏标按键的按下和松开
键盘事件按键类型、按键按下、按键松开
定时器事件定时时间到达
进⼊离开事件⿏标的进⼊和离开
滚轮事件⿏标滚轮滚动
绘屏事件重绘屏幕的某些部分
显⽰隐藏事件窗⼝的显⽰和隐藏
移动事件窗⼝位置的变化
窗⼝事件是否为当前窗⼝
⼤⼩改变事件窗⼝⼤⼩改变
焦点事件键盘焦点移动
拖拽事件⽤⿏标进⾏拖拽

2 🍑事件的处理🍑

事件处理⼀般常⽤的⽅法为:重写相关的 Event 函数。

在 Qt 中,⼏乎所有的 Event 函数都是虚函数,所以可以重新实现。如:在实现⿏标的进⼊和离开事件时,直接重新实现 enterEvent() 和 leaveEvent() 即可。enterEvent() 和 leaveEvent() 函数原型如下:

在这里插入图片描述

示例:创建一个项目,项目里面添加一个新的类,比如MyLabel,然后让该类继承自Label,重写对应的方法:
在这里插入图片描述
点击ui文件,增加一个Label,右键点击提升为,然后输入我们新增加的类名,点击增加以及提升。(我这里是已经提升过了的)
在这里插入图片描述
然后运行程序:
在这里插入图片描述
通过应用程序输出我们可以很直观感觉到鼠标进入Label以及退出Label时的改变。


3 🍑按键事件🍑

Qt 中的按键事件是通过 QKeyEvent 类来实现的。当键盘上的按键被按下或者被释放时,键盘事件便会触发。在帮助⽂档中查找 QKeyEvent 类如下:

在这里插入图片描述

3.1 🍎单个按键🍎

⽰例:当某个按键被按下时,输出:某个按键被按下了。

新建项⽬,在头⽂件 “widget.h” 中声明虚函数 keyPressEvent()

在这里插入图片描述
在 “widget.cpp” ⽂件中重写 keyPressEvent() 虚函数;
在这里插入图片描述
此时当我们点击按键a(A也可以,不区分大小写)时就会打印出我们想要的信息。

在这里插入图片描述

3.2 🍎组合按键🍎

在这里插入图片描述
Qt::KeyboardModifier 中定义了在处理键盘事件时对应的修改键。在 Qt 中,键盘事件可以与修改键⼀起使⽤,以实现⼀些复杂的交互操作。KeyboardModifier 中修改键的具体描述如下:

Qt::NoModifier⽆修改键
Qt::ShiftModifierShift 键
Qt::ControlModifierCtrl 键
Qt::AltModifierAlt 键
Qt::MetaModifierMeta键(在Windows上指Windows键,在macOS上指Command键)
Qt::KeypadModifier使⽤键盘上的数字键盘进⾏输⼊时,Num Lock键处于打开状态
Qt::GroupSwitchModifier⽤于在输⼊法 组之间 切换

代码示例:
在这里插入图片描述


4 🍑鼠标事件🍑

在 Qt 中,⿏标事件是⽤ QMouseEvent 类来实现的。当在窗⼝中按下⿏标或者移动⿏标时,都会产⽣⿏标事件。利⽤ QMouseEvent 类可以获取⿏标的哪个键被按下了以及⿏标的当前位置等信息。在 Qt 帮助⽂档中查找QMouseEvent类 如下图⽰:

在这里插入图片描述

4.1 🍎鼠标单击事件🍎

在 Qt 中,⿏标按下是通过虚函数 mousePressEvent() 来捕获的。mousePressEvent() 函数原型如下:

[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event)

⿏标左右键及滚的表⽰如下:

Qt::LeftButton ⿏标左键
Qt::RightButton ⿏标右键
Qt::MidButton ⿏标滚轮

代码示例:
在这里插入图片描述
结果验证:
在这里插入图片描述
使用右键,滚轮也是一个道理,这里就不再演示了。

4.2 🍎鼠标释放事件🍎

⿏标释放事件是通过虚函数 mouseReleaseEvent() 来捕获的。mouseReleaseEvent() 函数原型如下:

[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event)

⽰例:
在这里插入图片描述
结果验证:
在这里插入图片描述

4.3 🍎鼠标双击事件🍎

⿏标双击事件是通过虚函数:mouseDoubleClickEvent() 来实现的。mouseDoubleClickEvent()函数原型如下:

[virtual protected] void QWidget::mouseDoubleClickEvent(QMouseEvent *event)

⽰例:⿏标左键双击

在这里插入图片描述
结果验证:
在这里插入图片描述

4.4 🍎鼠标移动事件🍎

⿏标移动事件是通过虚函数:mouseMoveEvent() 来实现的。同时为了实时捕获⿏标位置信息,需要通过函数 setMouseTracking() 来追踪⿏标的位置。

mouseMoveEvent()函数原型如下:

[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event)

setMouseTracking()函数原型如下:

void setMouseTracking(bool enable)

说明:
setMouseTracking() 函数默认是 false,需要设置为 true,才能实时捕获⿏标位置信息。否则只有当⿏标按下时才能捕获其位置信息。

代码⽰例:
在这里插入图片描述
结果验证:
在这里插入图片描述

4.5 🍎滚轮事件🍎

在 Qt 中,⿏标滚轮事件是通过 QWheelEvent 类来实现的。滚轮滑动的距离可以通过 delta() 函数获取。delta() 函数原型如下:

int QGraphicsSceneWheelEvent::delta() const

其中返回值代表滚轮滑动的距离。正数表⽰滚轮相对于⽤⼾向前滑动,负数表⽰滚轮相对于⽤⼾向后滑动。

代码示例:
在这里插入图片描述
结果验证:
在这里插入图片描述


5 🍑定时器🍑

Qt 中在进⾏窗⼝程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使⽤定时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执⾏某⼀个任务。定时器在很多场景下都会使⽤到,如弹窗⾃动关闭之类的功能等。

Qt中的定时器分为 QTimerEventQTimer 这2个类。

  • QTimerEvent类⽤来描述⼀个定时器事件。在使⽤时需要通过 startTimer() 函数来开启⼀个定时器,这个函数需要输⼊⼀个以毫秒为单位的整数作为参数来表明设定的时间,它返回的整型值代表这个定时器。当定时器溢出时(即定时时间到达)就可以在 timerEvent() 函数中获取该定时器的编号来进⾏相关操作。
  • QTimer类来实现⼀个定时器,它提供了更⾼层次的编程接⼝,如:可以使⽤信号和槽,还可以设置只运⾏⼀次的定时器。

5.1 🍎QTimerEvent 类🍎

⽰例:在UI界⾯上放置两个 Label 控件,⼀个让其1秒数字累加⼀次,⼀个让其2秒数字累加⼀次。

首先现在界面上设置两个Label,在 “widget.h” 头⽂件中声明 timerEvent() 函数,并定义两个整型变量:
在这里插入图片描述

然后在 “widget.cpp” ⽂件中重写 timerEvent() 函数:
在这里插入图片描述
结果验证:
在这里插入图片描述

5.2 🍎QTimer 类🍎

⽰例:在UI界⾯放置⼀个 Label 标签,两个按钮,分别是 “开始” 和 “停⽌” ,当点击 “开始” 按钮时,开始每隔1秒计数⼀次,点击 “停⽌” 按钮时,暂停计数。

头文件:
在这里插入图片描述
源文件:
在这里插入图片描述
结果验证:
在这里插入图片描述

5.3 🍎获取系统日期及时间🍎

在 Qt 中,获取系统的⽇期及实时时间可以通过 QTimer 类 和 QDateTime类。QDateTime类 提供了字符串格式的时间。字符串形式的时间输出格式由 toString() ⽅法中的 format参数列表决定,可⽤的参数列表如下:
在这里插入图片描述

⽰例:获取系统⽇期及实时时间。

代码示例:
在这里插入图片描述
结果验证:
在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值