Qt 无标题无边框程序的拖动和改变大小

本文介绍了在Qt中创建无标题无边框窗口时,如何实现拖动和改变窗口大小的功能。作者分享了两种方法:一是通过处理mouseMoveEvent、mousePressEvent和mouseReleaseEvent事件,二是利用Qt的winEvent函数处理Windows消息。第一种方法存在拖动不准确和窗口抖动的问题,而第二种方法能够达到与有边框窗口相同的效果,通过处理WM_NCHITTEST消息让Windows帮助处理拖动和调整大小操作。

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

最近做项目遇到的问题,总结下。

有时候我们觉得系统的标题栏和按钮太丑太呆板,想做自己的标题栏以及最大化、最小化、关闭,菜单按钮,我们就需要 

setWindowFlags(Qt::FramelessWindowHint);
但是这样过后,我们就不能拖动窗口改变位置,以及拖动边缘改变窗口大小了。

有两种方案处理这种情况:

1.自己对mouseMoveEvent,mousePressEvent,mouseReleaseEvent 等事件进行处理。

2.Qt可以处理windows的消息。大家重新实现bool winEvent(MSG *message, long *result);(在此又一次感觉Qt的NB)


我刚开始使用第一种方法去实现的。移动窗口很容易做,大家可以去看看这个大大写的,比网上其他版本问题少些。

http://blog.youkuaiyun.com/aqtata/article/details/8902889

在窗口边缘按下鼠标拖动改变窗口大小就比较麻烦了。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值