Qt (16)【Qt 事件 —— Qt 事件简介 | 如何重写相关的 Event 函数】
阅读导航
- 引言
- 一、事件介绍
- 二、如何重写相关的 Event 函数
- 1. 事件的处理简介
- 2. 示例重写鼠标相关的 Event 函数
- (1)新建Qt项目,设计UI文件
- (2)新添加MyLabel类
- (3)重写enterEvent()方法和leaveEvent()方法
- (4)提升窗口中的Lable基类
- 总结
引言
在上一篇文章里,我们学习了Qt中窗口的基础知识,了解了如何创建和管理GUI界面。但要让这些窗口“活”起来,就需要处理用户的各种操作,比如点击、键盘输入等。这些操作在Qt中是通过事件来传达的。因此,接下来我们将深入探讨Qt的事件系统,看看它是如何捕获、传递和处理这些事件的。通过了解Qt的事件处理机制,您将能更好地控制应用程序的行为,使其更加灵活和响应迅速。让我们开始吧!
一、事件介绍
事件是在应用程序运行过程中,无论是内部还是外部发生的各种事情或动作的统称。在Qt框架中,这一概念通过具体的对象来实现,这些对象均继承自一个名为QEvent
的抽象基类。
Qt事件可以大致分为两类:一类是由用户交互直接触发的,如键盘事件、鼠标事件等,它们直接响应于用户的操作;另一类则是由系统或Qt框架内部自动管理和发出的,如定时器事件,这些事件不直接依赖于用户的直接操作,而是根据系统状态或应用程序的需求自动产生。常见的Qt事件如下:
🎯常见事件描述
事件名称 | 描述 |
---|---|
鼠标事件 | 鼠标左键、鼠标右键、鼠标滚轮,鼠标的移动,鼠标按键的按下和松开 |
键盘事件 | 按键类型、按键按下、按键松开 |
定时器事件 | 定时时间到达 |
进入离开事件 | 鼠标的进入和离开 |
滚轮事件 | 鼠标滚轮滚动 |
绘屏事件 | 重绘屏幕的某些部分 |
显示隐藏事件 | 窗口的显示和隐藏 |
移动事件 | 窗口位置的变化 |
窗口事件 | 是否为当前窗口 |
大小改变事件 | 窗口大小改变 |
焦点事件 | 键盘焦点移动 |
拖拽事件 | 用鼠标进行拖拽 |
Qt通过事件处理机制,使得开发者能够灵活地对这些事件进行监听和响应,从而构建出丰富、动态的用户界面和应用程序逻辑。
二、如何重写相关的 Event 函数
1. 事件的处理简介
在Qt中,处理事件的一种常用方法是重写(Override)相关的Event
函数。Qt设计了许多事件处理函数作为虚函数,这意味着开发者可以在自己的类中重新实现(即重写)这些函数来自定义事件的行为。
2. 示例重写鼠标相关的 Event 函数
实现功能:当需要处理鼠标的进入和离开事件时,可以直接在自定义的QWidget或其子类中重写enterEvent(QEvent *event)
和leaveEvent(QEvent *event)
这两个函数。
这两个函数的原型通常如下所示:
通过在自定义的类中实现这些函数,可以定义当鼠标进入或离开你的窗口或控件时应该执行的操作。
(1)新建Qt项目,设计UI文件
⭕新建Qt项目
⭕设计UI文件
(2)新添加MyLabel类
(3)重写enterEvent()方法和leaveEvent()方法
(4)提升窗口中的Lable基类
🎯在UI文件中选中Label,右键------>提升为…
🎯当点击"提升为…"之后,弹出如下对话框
执行效果如下:当鼠标进入设计好的标签之后,就会在应用程序输出栏中打印:鼠标进入,出来的时候也会有提示
总结
我们通过创建一个新的QLabel子类并重写其enterEvent()和leaveEvent()方法,我们能够在鼠标进入或离开标签时改变其行为。随后,利用Qt Designer将UI中的QLabel控件提升为我们自定义的类实例,实现了这些自定义行为的实际应用。这体现了Qt事件处理机制允许开发者轻松扩展控件功能的能力。