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

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

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

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

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

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

相关推荐
妙为6 小时前
银河麒麟V4下编译Qt5.12.12源码
c++·qt·国产化·osg3.6.5·osgearth3.2·银河麒麟v4
史迪仔01129 小时前
[QML] QML IMage图像处理
开发语言·前端·javascript·c++·qt
AwesomeCPA9 小时前
Miaoduo MCP 使用指南(VDI内网环境)
前端·ui·ai编程
hu556679811 小时前
Photoshop(PS)蓝底和红底照片的CMYK值色值是多少
ui·photoshop
UXbot13 小时前
AI原型设计工具评测:从创意到交互式Demo,5款产品全面解析
前端·ui·设计模式·ai·ai编程·原型模式
小樱花的樱花14 小时前
打造高效记事本:UI设计到功能实现
开发语言·c++·qt·ui
丁劲犇14 小时前
QMetaObject的invokeMethod异步阻塞调用在MCPServer开发中的巧妙应用
qt·ai·agent·异步·阻塞·mcp·mcp server
小程故事多_8015 小时前
AI Coding 工程化革命,Superpowers 管流程,ui-ux-pro-max 管质感
人工智能·ui·架构·aigc·ai编程·ux·claude code
路过&16 小时前
自制了一款字体点阵生成器
单片机·ui
m0_4972141516 小时前
Qt事件系统
开发语言·qt