QT无边框可移动可改变大小窗体

本文介绍了如何在QT中创建无边框窗体并实现其可移动和可改变大小的功能。主要涉及两种方法:一是通过自处理鼠标事件,包括设置窗体无边框、追踪鼠标、重载鼠标事件函数;二是利用QT处理Windows消息,只需设置窗体属性并重载`paintEvent`。文章提供了两种方法的完整代码链接,推荐使用第二种方法,以解决第一种方法中可能出现的控件覆盖、窗口抖动等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Win8,win10都出来了,为了迎合系统的扁平化风格,项目要求窗体是无边框,看了一下QT的主要Widget,没有现成的,好吧,那就只有自己写了。

在网上也看到了一些代码,进行小结了一下,无边框窗体大小的改变,移动都需要自己处理,不在像有边框的窗体一样自动处理,处理起来目前有两种方法:

一、完全自己处理窗体的鼠标事件;

二、接收鼠标事件,连接到系统消息,由系统来处理;

 

先介绍第一种方法:

1.首先大家要了解各九宫格的概念

一个窗体可以被划分为上、下、左、右、左上、左下、右上、右下、中间,除了中间部分,其他都需要写程序处理。Padding其实就是鼠标放上去后需要改变鼠标的手势为改变大小形状。

在程序中定义Padding 为2,可定义枚举类型。

2.定义一个方法,参数为鼠标目前的全局位置。目的是获取窗体在屏幕上的位置区域

3.在对话框类中定义几个私有成员变量

boolisLeftPressDown;  // 判断左键是否按下

QPoint dragPosition;   // 窗口移动拖动时需要记住的点
Direction dir;        //
窗口大小改变时,记录改变方向

在窗体的构造函数中初始化变量,并设置窗体为无边框窗体:

isLeftPressDown = false;

this->dir= NONE;

this->

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值