尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Qt — Qt 事件

发布时间:2026/9/29 11:26:16

资讯中心
01
ARTICLE

Qt — Qt 事件

Qt — Qt 事件
目录1. 事件的介绍2. 事件的处理2.1 重写鼠标进入和鼠标离开2.2 鼠标按下事件2.3 鼠标释放事件2.4 鼠标双击事件2.5 鼠标移动事件2.6 鼠标滚轮的滚动动作2.7 按键事件2.8 定时器2.9 窗口移动和大小改变事件3. 总结虽然 Qt 是跨平台的 C 开发框架Qt 的很多能力其实是操作系统提供的只不过 Qt 封装了系统的API。程是运行在操作系统上的需要系统给我们提供支撑。事件文件操作多线程编程网络编程多媒体音频、视频1. 事件的介绍信号槽用户进行的各种操作就可能会产生出信号可以给某个信号指定槽函数当信号触发时就能够自动执行到对应的槽函数事件和信号槽非常相似用户进行的各种操作也会产生事件。程序员同样可以给事件关联上处理函数处理的逻辑当事件触发的时候就能够执行到对应的代码。事件本身是操作系统提供的机制。Qt 也同样把操作系统事件机制进行了封装拿到了 Qt 中。但是由于事件对应的代码编写起来不是很方便。Qt 对于事件机制又进行了进一步的封装就得到了信号槽。信号槽和事件的关系信号槽就是对于事件的进一步封装事件是信号槽的底层机制。实际 Qt 开发程序过程中绝大部分和用户之间进行的交互都是通过 ”信号槽“来完成的。有些特殊情况下信号槽不一定能搞定某个用户的动作行为Qt 没有提供对应的信号……此时就需要通过重写事件处理函数的形式来手动处理事件的响应逻辑开放事件机制我们就可以根据实际的需要进行更深度的定制化操作了。用户进行了很多操作就会产生很多的事件当然也会产生很多的信号不同的场景下要关注的点是不一样的这些事件的子类中就会包含一些对应的不同的属性。常见事件描述事件名称描述⿏标事件⿏标左键、⿏标右键、⿏标滚轮⿏标的移动⿏标按键的按下和松开键盘事件按键类型、按键按下、按键松开定时器事件定时时间到达进⼊离开事件⿏标的进⼊和离开滚轮事件⿏标滚轮滚动绘屏事件重绘屏幕的某些部分显⽰隐藏事件窗⼝的显示和隐藏移动事件窗⼝位置的变化窗⼝事件是否为当前窗⼝大小改变事件窗⼝大小改变焦点事件键盘焦点移动拖拽事件⽤⿏标进⾏拖拽2. 事件的处理让一段代码和某个事件关联起来当事件触发的时候就能指定到这段代码之前是通过 connect 来完成上述关联的对于事件来说还不太一样让当前的类重写某个事件处理函数。用到的是 “多态”机制创建子类继承自 Qt 已有的类在子类中重写父类的书简处理函数后续事件触发的过程中就会通过多态这样的机制执行到我们自己写的子类的函数中。2.1 重写鼠标进入和鼠标离开enterEventleaveEvent这里需要创建 QLabel 的子类重写 enterEvent 和 leaveEvent要想重写父类的函数就需要确保你这边写的函数名字和函数的参数列表都完全一致形参名无所谓上述代码虽然重写了这两函数但是还有点问题当前在界面上创建的这个 label 其实是 QLabel不是我们自己写的 Label还是父类不是子类自然执行不到我们写的那个方法必须要确保界面上的这个 label 是一个我们自己定义的 label 实例才会执行到。一定要确保你的类名以及头文件的名字和上述自定义的类名头文件等等内容都要匹配上点击添加此时类型变为 Label 类型通过 “提升为” 这样的方式就可以把 Qt Designer 中拖上去的控件的类型转换为自定义的控件类型再次运行此时说明当前的 enterEvent 和 leaveEvent 这两个事件就被我们给捕获到了。2.2 鼠标按下事件在 Qt 中⿏标按下是通过虚函数 mousePressEvent() 来捕获的。mousePressEvent() 函数原型如下[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event)⿏标左右键及滚的表⽰如下Qt::LeftButton ⿏标左键Qt::RightButton ⿏标右键Qt::MidButton ⿏标滚轮点击添加点击提升重写该函数运行鼠标的左键、右键、滚轮、侧键点击都可以获取到运行区分按下鼠标的是左键还是右键运行2.3 鼠标释放事件⿏标释放事件是通过虚函数 mouseReleaseEvent() 来捕获的。mouseReleaseEvent() 函数原型如下[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event)运行clicked 这样的信号就相当于是一次鼠标按下事件和一次鼠标释放事件。2.4 鼠标双击事件⿏标双击事件是通过虚函数mouseDoubleClickEvent() 来实现的。mouseDoubleClickEvent()函数原型如下[virtual protected] void QWidget::mouseDoubleClickEvent(QMouseEvent *event)运行双击左键第二次按下的时候才能识别到是双击。比如有的程序可能是的单击有一些墨迹双击又有另一些逻辑如果我们没注意可能双击操作就能触发单击的逻辑可能就有 bug。2.5 鼠标移动事件以上重写鼠标事件的操作都是在自定义的 Label 中完成的此时鼠标只有在 Label 范围内进行动作的时候才能捕获到。也可以把这些操作直接放到 WidgetQWidget 子类来完成。这样的话鼠标在整个窗口中进行的各种动作都能获取到了。鼠标移动不同于鼠标按下随便移动一下鼠标就会产生大量的鼠标移动事件。当你进行捕获事件的时候尤其是在这里在进行一些复杂逻辑的时候程序负担就很重很容易产生卡顿之类的情况。Qt 为了保证程序的流畅性默认情况下不会对鼠标移动进行追踪。鼠标移动的时候不会调用 mouseMoveEvent除非显示告诉 Qt 就要追踪鼠标位置。运行2.6 鼠标滚轮的滚动动作在 Qt 中⿏标滚轮事件是通过 QWheelEvent 类来实现的。滚轮滑动的距离可以通过 delta() 函数获取。delta() 函数原型如下int QGraphicsSceneWheelEvent::delta() const其中返回值代表滚轮滑动的距离。正数表示滚轮相对于用户向前滑动负数表示滚轮相对于用户向后滑动。运行2.7 按键事件Qt 中的按键事件是通过QKeyEvent类来实现的。当键盘上的按键被按下或者被释放时键盘事件便会触发。之前的 QShortCut 这是信号槽机制封装过的获取键盘按键的方式。站在更底层的角度也可以通过事件获取到当前用户键盘按下的情况。运行此时只有按下 a 才有反应其余的键都没反应。按下两个键将这些搭配组合键的功能键单独拎出来了modifiers修饰符运行按下 ctrl a添加快捷键更好的办法是 QShortCut。2.8 定时器Qt 中在进行窗⼝程序的处理过程中经常要周期性的执⾏某些操作或者制作⼀些动画效果使⽤定时器就可以实现。所谓定时器就是在间隔⼀定时间后去执⾏某⼀个任务。定时器在很多场景下都会使⽤到如弹窗⾃动关闭之类的功能等。Qt中的定时器分为 QTimerEvent 和 QTimer 这2个类。QTimerEvent类 ⽤来描述⼀个定时器事件。在使⽤时需要通过 startTimer() 函数来开启⼀个定时器这个函数需要输⼊⼀个以毫秒为单位的整数作为参数来表明设定的时间它返回的整型值代表这个定时器。当定时器溢出时即定时时间到达就可以在 timerEvent() 函数中获取该定时器的编号来进⾏相关操作。startTimer 启动定时器killTimer 关闭定时器QTimer类 来实现⼀个定时器它提供了更⾼层次的编程接⼝如可以使⽤信号和槽还可以设置只运⾏⼀次的定时器。运行使用 timerEvent 比 QTimer 还是要复杂一点。手动管理timerId还需要区分整个函数调用是哪个 timer 引起的。实际开发中使用 QTimer 即可。2.9 窗口移动和大小改变事件moveEvent 窗口移动时触发的事件resizeEvent 窗口大小改变时触发的事件运行3. 总结实际开发中优先使用信号槽的方式来完成用户交互的功能
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。