《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,包括但不限于:

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

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

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

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

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

相关推荐
军训猫猫头41 分钟前
87.在线程中优雅处理TryCatch返回 C#例子 WPF例子
开发语言·ui·c#·wpf
CoderIsArt1 天前
QT中已知4个坐标位置求倾斜平面与倾斜角度
qt·平面
__lost1 天前
Pysides6 Python3.10 Qt 画一个时钟
python·qt
胡斌附体1 天前
qt socket编程正确重启tcpServer的姿势
开发语言·c++·qt·socket编程
冷凝女子1 天前
【QT】获取文件路径中的文件名,去掉后缀,然后提取文件名中的数字
开发语言·数据库·qt
孤独得猿1 天前
Qt常用控件第一部分
服务器·开发语言·qt
千鼎数字孪生-可视化1 天前
3D模型给可视化大屏带来了哪些创新,都涉及到哪些技术栈。
ui·3d·信息可视化·数据分析
跟着珅聪学java1 天前
spring boot +Elment UI 上传文件教程
java·spring boot·后端·ui·elementui·vue
強云1 天前
界面架构- MVP(Qt)
qt·架构
嘤国大力士2 天前
C++11&QT复习 (七)
java·c++·qt