《Qt/UI美化实战课程》新课首发
(1)无边框窗口(11讲)
(2)图标字体(8讲)
(3)官方图表QChart:曲线、柱状图、饼图(20+讲)
(4)第三方图表QCustomPlot:曲线、柱状图、饼图(20+讲)
(5)语法高亮(12+讲)
(6)仪表盘(10+讲)
(7)天气预报(11+讲)
(8)基础控件(15+讲)
(9)高级控件(12+讲)
(10)精美换肤(15+讲)
详情参见个人主页的置顶视频(明王出品,必属精品)
需要系统跟明王学习的小伙伴,可以直接加明王W-X:coding4096
(1)总课时:超 120+ 讲,每日更新
(2)讲课风格:从零新建项目,从零一行行写代码
(3)提供资料:视频教程+配套源码+详细笔记
1. 效果演示、技术点
本章实现的无边框窗口,支持以下特性:
✅ 支持鼠标拖拽4个边框和4个角,来缩放窗体
✅ 同时支持鼠标拖动标题栏以及标题栏之外,来移动窗体
✅ 支持双击标题栏,来实现窗口最大化和恢复
✅ 最大化状态下,拖动标题栏恢复原始大小
✅ 支持窗口固定大小,不允许缩放
本节演示下最终实现的无边框窗口的效果,如下:
2. 实现方式
之所以要自己定制无边框窗口,是因为 QT
自带的标题栏很丑,无法定制。
所以实际项目中的做法是:去除 QT
自带的标题栏,然后自己实现一个带有自定义标题栏的无边框窗口。
通常有两种做法:
(1)重载 nativeEvent()
函数
该函数拦截 Windows
系统消息(如 WM_NCHITTEST
)来实现
这种方法需要了解 Windows
系统消息,并且是针对 Windows
系统的,对跨平台显然无法支持
(2)纯 QT
实现
这种方式通过处理 QT
中的一些事件,比如鼠标事件(mouseMoveEvent
、mousePressEvent
、mouseReleaseEvent
等),通过重载相应的事件处理函数,实现窗口的拉伸缩放、窗口移动等
这种方法是纯 QT
代码实现,支持跨平台
PS: 网上能查到的各种实现,各种小 BUG
,包括但不限于:
-
缩放窗口时,把窗口 "推走";
-
最大化状态变为最小化后,再次恢复不是最大化状态
-
点击标题栏后,右上角的按钮失去 "活性"
-
右上角的按钮,鼠标悬浮上去后底纹背景无法变化
本章会从零开始、从零新建项目实现这个完善的无边框窗口,可以直接应用到商业项目中去!