实现对带边框QWidget不能最大化、不能最小化、不能通过鼠标拖动边框改变该控件的大小、使用鼠标拖动标题栏不能改变该控件的位置

本文介绍了如何使用Qt的setWindowFlags()函数禁止QWidget的最大化、最小化和通过边框调整大小的功能。同时,通过监听NonClientAreaMouseButtonPress和NonClientAreaMouseButtonRelease事件,实现鼠标拖动标题栏时无法移动控件位置的效果。目前的实现方式存在一个问题:在鼠标释放时,控件会回到固定位置,但期望效果是任何时候都不能通过鼠标拖动改变窗体位置。作者期待找到更好的解决方案。
摘要由CSDN通过智能技术生成

1、设置带边框的QWidget不能最大化,最小化,以及固定大小(不能通过鼠标拖动边框改变该控件的大小):可以通过setWindowFlags();函数对窗口样式进行设置

t::WindowFlags flags = 0;
flags |= Qt::Window;                      	// 设置控件显示为为窗口样式
flags |= Qt::WindowCloseButtonHint;            	// 设置关闭窗口按钮
flags |= Qt::MSWindowsFixedSizeDialogHint;	// 设置鼠标拖动边框不能改变控件大小
mWidget->setWindowFlags(flags);

2、使用鼠标拖动标题栏不能改变该控件的位置:Qt的窗体结构中,Window Title和Client Area是分离开的,其中控件的标题栏的鼠标事件有:

        NonClientAreaMouseMove = 173,
        NonClientAreaMouseButtonPress = 174,
        NonClientAreaMouseButtonRelease = 175,
        NonClientAreaMouseButtonDblClick = 176,

可以通过实现event(QEvent *event)方法,截取这几个事件,完成相应的功能。所以对于使鼠标拖动不改变窗体位置这一需求,我暂时采用如下思路实现:

  1. 先定义一个标志位hasClickedTiTleBar_flag,初始化为零;
  2. 在窗体控件的对应的类中实现event(QEvent *event)方法&#x
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值