《Qt/UI美化实战课程》第一章 无边框窗口(11讲)

《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 中的一些事件,比如鼠标事件(mouseMoveEventmousePressEventmouseReleaseEvent 等),通过重载相应的事件处理函数,实现窗口的拉伸缩放、窗口移动等

这种方法是纯 QT 代码实现,支持跨平台

PS: 网上能查到的各种实现,各种小 BUG,包括但不限于:

  • 缩放窗口时,把窗口 "推走"

  • 最大化状态变为最小化后,再次恢复不是最大化状态

  • 点击标题栏后,右上角的按钮失去 "活性"

  • 右上角的按钮,鼠标悬浮上去后底纹背景无法变化

本章会从零开始、从零新建项目实现这个完善的无边框窗口,可以直接应用到商业项目中去!

相关推荐
C++ 老炮儿的技术栈9 小时前
Qt5.9.1 Windows 完整开发环境搭建流程
开发语言·c++·windows·qt·编辑器·代码化
Quz15 小时前
QML ComboBox 可编辑输入与动态更新模型
qt
丰锋ff15 小时前
7.2Qt中Json的操作
开发语言·qt·json
我不是疯子是傻子15 小时前
用DeepSeek生成Qt多协议解析器?「正则+状态机+AI分支裁剪」混合调优实战
开发语言·qt
电子云与长程纠缠16 小时前
UE5 Lyra PocketWorld进行3D内容UI预览 - 下
开发语言·学习·游戏·ui·ue5
qq_4017004116 小时前
QT段错误一般是什么原因造成的,如何快速排查
qt
平常心的技术小牛17 小时前
Qt-快速上手-QLabel
开发语言·qt
不会代码的小猴17 小时前
2. 了解Qt
开发语言·c++·笔记·qt·算法
丰锋ff1 天前
3.1 Qt事件之事件处理器
开发语言·qt