事件,在 Qt 中是很重要的一块内容,在实际工作中用到的也很多。
这里用一章的篇幅来讲解它。
本节先看下本章的一个总览,演示下所有效果,以及涉及到的一些技术点。
1. 常用的事件
详细讲解常用事件:鼠标进入/离开事件、鼠标按下/移动/释放事件、键盘事件、定时器事件、拖动事件、绘图事件、右键菜单
2. 事件的处理流程
学会了常用事件处理函数,会详细讲解事件处理流程。
实际工作中,往往窗口是相互嵌套的,比如:
- 一个标签放在一个
widget中, 一个widget也可能放在另一个widget中 - 这时就涉及在父子窗口之间的传递,什么时候需要传递,什么时候又要终止传递。这是需要搞清楚的。
最终会给大家总结一张图:
3. 应用案例:无边框窗口
3.1 效果演示
本节仅演示我实现的一个非常完善的无边框窗口,它支持以下特性:
✅ 支持鼠标拖拽4个边框和4个角,来缩放窗体
✅ 支持鼠标拖动标题栏,来移动窗体
✅ 支持双击标题栏,来实现窗口最大化和恢复
✅ 最大化状态下,拖动标题栏恢复原始大小
整体效果如下:
完善的无边框窗口,会在《Qt/UI 美化实战课程》中详细讲解,这里仅做一个演示。
3.2 为什么要自己实现?
之所以要自己定制无边框窗口,是因为QT自带的标题栏很丑,无法定制。
所以实际项目中的做法是:去除QT自带的标题栏,然后自己实现一个带有自定义标题栏的无边框窗口
通常有两种做法:
方法一:
通过重载nativeEvent函数拦截Windows系统消息(如WM_NCHITTEST)来实现
这种方法需要了解Windows系统消息,并且是针对Windows系统的,对跨平台显然无法支持方法二:
纯QT实现
这种方式通过处理QT中的一些事件,比如鼠标事件mouseMoveEvent、mousePressEvent、mouseReleaseEvent等
通过重载相应的事件处理函数,实现窗口的拉伸缩放、窗口移动等
这种方法是纯QT代码实现,支持跨平台
PS:网上能查到的各种实现,各种小 BUG,包括但不限于:
(1)缩放窗口时,把窗口 “推走”;
(2)最大化状态变为最小化后,再次恢复不是最大化状态
(3)点击标题栏后,右上角的按钮失去 “活性”
(4)在我实现的无边框窗口中,这些问题都一一解决了!
另附:无边框窗口_效果地址:
链接:https://pan.baidu.com/s/1_3FwQ5B4Uop-PwUXqQmFcA?pwd=qtui
提取码:qtui
3.3 跟着明王学习
关于无边框窗口源码的获取:会在《Qt/UI美化实战课程》中详细讲解
会从零开始、从零新建项目实现一个完善的无边框窗口,可以直接应用到商业项目中
当然,《Qt/UI美化实战课程》 包括的干货非常多,不止UI美化。同样的讲课风格、详尽的课程笔记、规范的代码风格
✅ 第一章 无边框窗口(11讲)
✅ 第二章 图标字体(8讲)
✅ 第三章 官方图表QChart:曲线、柱状图、饼图(20+讲)
✅ 第四章 第三方图表QCustomPlot:曲线、柱状图、饼图(20+讲)
✅ 第五章 语法高亮(12+讲)
✅ 第六章 仪表盘(10+讲)
✅ 第七章 天气预报(11+讲)
✅ 第八章 基础控件(15+讲)
✅ 第九章 高级控件(12+讲)
✅ 第十章 精美换肤(15+讲)
详情参见:https://qt1024.cn/qt_ui/
明王出品,必属精品。需要系统跟明王学习的小伙伴,可以直接加明王微信:coding4096







