上一节实现的简单的无边框窗口,仅用于练习事件。

1. 效果演示

本节仅演示我实现的一个非常完善的无边框窗口,它支持以下特性:

✅ 支持鼠标拖拽4个边框和4个角,来缩放窗体
✅ 支持鼠标拖动标题栏,来移动窗体
✅ 支持双击标题栏,来实现窗口最大化和恢复
✅ 最大化状态下,拖动标题栏恢复原始大小

整体效果如下:
213.gif

2. 为什么要自己实现?

之所以要自己定制无边框窗口,是因为QT自带的标题栏很丑,无法定制。
所以实际项目中的做法是:去除QT自带的标题栏,然后自己实现一个带有自定义标题栏的无边框窗口

通常有两种做法:

  • 方法一
    通过重载nativeEvent函数拦截Windows系统消息(如WM_NCHITTEST)来实现
    这种方法需要了解Windows系统消息,并且是针对 Windows 系统的,对跨平台显然无法支持

  • 方法二
    QT实现
    这种方式通过处理QT中的一些事件,比如鼠标事件mouseMoveEventmousePressEventmouseReleaseEvent
    通过重载相应的事件处理函数,实现窗口的拉伸缩放、窗口移动等
    这种方法是纯QT代码实现,支持跨平台

说明:网上能查到的各种实现,各种小BUG,包括但不限于:
(1)缩放窗口时,把窗口 “推走”;
(2)最大化状态变为最小化后,再次恢复不是最大化状态
(3)点击标题栏后,右上角的按钮失去 “活性”
(4)在我实现的无边框窗口中,这些问题都一一解决了!

另附:无边框窗口_效果地址:
链接:https://pan.baidu.com/s/1_3FwQ5B4Uop-PwUXqQmFcA?pwd=qtui
提取码:qtui

3. 跟着明王学习

关于无边框窗口源码的获取:会在《Qt/UI美化实战课程》中详细讲解
会从零开始、从零新建项目实现一个完善的无边框窗口,可以直接应用到商业项目中
当然,《Qt/UI美化实战课程》包括的干货非常多,不止UI美化。同样的讲课风格、详尽的课程笔记、规范的代码风格

明王出品,必属精品。需要系统跟明王学习的小伙伴,可以直接加明王微信:coding4096