QT 常用setAttribute 、setWindowFlags

一、主界面

1、窗体属性

//设置为模态框。(如果再设置无边框窗口,那么模态会失效,不会阻塞其他窗口,须重新设置)
setAttribute(Qt::WA_ShowModal, true);
      
//如果部件接收了关闭事件,则删除这个部件,相当于delete 
setAttribute(Qt::WA_DeleteOnClose, true);
  
//意思是显示小部件而不使其处于活动状态,使它不能获得焦点
setAttribute(Qt::WA_ShowWithoutActivating,true);

//使透明效果生效
setAttribute(Qt::WA_TranslucentBackground);

//穿透属性,可以使部件不可点击,只显示外形,适合覆盖中的部件使用
setAttribute(Qt::WA_TransparentForMouseEvents);

//输入法开关,如果一个编辑框不想让用户使用输入法输入字符打字,就可以将该属性设置为false。
setAttribute(Qt::WA_InputMethodEnabled, false);

//使用操作系统原生的本地窗口,可以提高兼容性
//但是在linux下,使用该属性会有问题,因为linux下x11管理的默认原生窗口是白色矩形,就算添加了子部件,也会出现短暂的白色矩形闪烁。
setAttribute(Qt::WA_NativeWindow, true);

2、窗体标志

//产生一个无边框的窗口,用户不能移动和改变大小
setWindowFlags(Qt::FramelessWindowHint); 

//待在所有窗口的最上面
setWindowFlags(Qt::WindowStaysOnTopHint);

//指示小部件是工具窗口,如果有父窗口,则永远一直显示在父窗口的上面。
//标题栏和装饰比较小,就像是无边框线。
//并且此工具窗口无任务栏显示,不会获取焦点
setWindowFlags(Qt::Tool);

//设置后窗口将不受窗口管理器的限制,该标志只在linux下生效,windows下将被忽略,因为 Windows 使用的是另一种窗口系统
//主要功能是:不让该窗体抢占焦点
setWindowFlags(Qt::X11BypassWindowManagerHint);

//自定义窗口标题栏,如果不设置显示标题栏和添加按钮,则不显示标题栏。
setWindowFlags(Qt::CustomizeWindowHint);

//显示标题栏
setWindowFlags(Qt::WindowTitleHint);     

//下面这种写法,只能生效最后一个设置的标志。
setWindowFlags(Qt::WindowMinimizeButtonHint);//添加最小化按钮
setWindowFlags(Qt::WindowMaximizeButtonHint);//添加最大化按钮
setWindowFlags(Qt::WindowMinMaxButtonsHint); //添加最小化按钮和最大化按钮
setWindowFlags(Qt::WindowCloseButtonHint);   //添加关闭按钮

//如果需要一次性生效
setWindowFlags(Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint | Qt::WindowMaximizeButtonHint);

//在原有窗口属性的基础上增加新属性
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);

//只修改一种属性的状态
setWindowFlag(Qt::WindowStaysOnTopHint, false);

2.Qt::WA_DeleteOnClose
(1)调用close()方法,会向widget发送一个关闭事件(QCloseEvent),如果widget接受了关闭事件,窗口将会隐藏(实际上调用hide())。如果widget不接受关闭事件,那么窗口将什么也不做。也就是说close()方法只会隐藏窗口对象而已,并不会销毁该对象。
(2)倘若设置了WA_DeleteOnClose属性,它接收到QCloseEvent事件后,除了调用hide()方法将窗口隐藏外,同时会调用deleteLater()方法将窗口释放掉,不会再占用资源。

二、注意

1.最大化按钮失效置灰的问题

MainWindow的最大宽度、高度必须为QT 规定的默认值。
在这里插入图片描述

  • 7
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值