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

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

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

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

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

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

相关推荐
SoraLuna6 小时前
「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
macos·ui·harmonyos
徒步僧9 小时前
ThingsBoard规则链节点:RPC Call Reply节点详解
qt·microsoft·rpc
可峰科技10 小时前
斗破QT编程入门系列之一:认识Qt:初步使用(四星斗师)
开发语言·qt
我喜欢就喜欢10 小时前
基于qt vs下的视频播放
开发语言·qt·音视频
CP-DD11 小时前
Qt的架构设计
qt
阿_旭11 小时前
基于YOLO11/v10/v8/v5深度学习的维修工具检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
人工智能·python·深度学习·qt·ai
Bruce小鬼15 小时前
QT创建按钮篇
开发语言·qt
martian66517 小时前
QT开发:掌握现代UI动画技术:深入解析QML和Qt Quick中的动画效果
开发语言·c++·qt·ui
初九之潜龙勿用19 小时前
C#结合JS解决Word添加无效位图导致进程停滞的问题
javascript·ui·c#·word·asp.net
墨染新瑞19 小时前
两个有趣的小东西(qt和类型转换)
开发语言·网络·qt