添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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);

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);

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

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

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

1.1 将某一子窗口设置为最顶层窗口。 使用Qt::Tool 属性:setWindowFlagsQt::Tool) 1.2 重新定义窗口的属性,比如:取掉最大、最小、关闭等按钮,或者直接使用无边框窗口 系统环境:windows10 64位企业版开发环境:vs2017+qt5.9.9+vsaddin2.7.2.2问题:qt界面程序主界面置顶,并一直获取焦点使qt主窗口一直处于激活状态。思路:定时器或者相关事件重载。 widget->setWindowFlags(Qt::WindowStaysOnTopHint); widget->setWindowFlags(Qt::FramelessWi 问题描述:进行无边框、透明,最小化之后,再次显示失去焦点! 1. 使用代码setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowSystemMenuHint); setAttribute(Qt::WA_TranslucentBackground, true); 进行窗体无边框、透明 2.点击按钮使窗体最小化(showMinimized) 3.点击任务栏重新显示窗体 期望结果:窗体与最小化之前状态相同 实际结果:窗体失去了焦点(可通过鼠标滑过输入框看具体效果) 默认情况下, 多层嵌套窗口各层全都会接收到鼠标事件(只要重写了鼠标事件函数), 而当加入以下函数调用后, 当前窗口将会透过鼠标点击事件(即该窗口对鼠标事件不再响应, 即使重写了鼠标事件函数)。注意参数第二项设为false时将恢复默认。 setAttribute(Qt::WA_TransparentForMouseEvents, true); https://blog.csdn.net/qq_27312943/article/details/50899866 模态对话框就是指在子对话框弹出时,焦点被强行集中于该子对话框,子对话框不关闭,用户将无法操作其他的窗口。非模态相反,用户仍然可以操作其他的窗口,包括该子对话框的父对话框。 如果从线程角度来讲,模态对话框实际上是线程阻塞的,也就是子对话框是一个线程,但是在创建这个子线程之后,父窗... 属性是用QWidget::setAttribute()设置和清除的。用QWidget::testAttribute()查询是否设置了某种属性。有些属性特殊便捷函数可以设置。 Qt::WA_AcceptDrops:接受拖放,QWidget::setAcceptDrops()是此设置的便捷函数。 Qt::WA_AlwaysShowToolTips:设置窗口(注意是窗口,当QWidget作为子部件时无效)为非活动时也显示提示信息。(setToolTip()设置了窗口提示信息) Qt::WA_CustomWh     在进行Gui开发时,往往不会使用windows原生的窗口,而是需要进行自定义,此时就需要去除原有的窗口,以及上面相关的关闭按键,最小化最大化按键等; 这里使用函数:void setWindowFlags ( Qt::WindowFlags type ) Qt::WindowFlags 标志位 很多人可能使用第2类设置属性,但是总是不成功,其原因是如果子窗口有父亲,则窗口属性也被父亲控制,这时候的这个子窗口其实并不是严格意义上的完整窗口,相当于父窗口的一个部件,所以这时候设置自定义窗口属性,有两种方法:(1)设置父亲窗口属性,(2)给子窗口设置属性的时候加上 Qt::WindowQt::Dialog等指定该子窗口为完整窗口,(Qt::DIalog | Qt::CustomizeWindowHint ) 模态窗口会阻止其他窗口的输入型事件(如获取焦点),但是模态窗口的子窗口不会被限制。 (设置 setAttribute(Qt::WA_showModal, true); 的方式Qt4.5已废弃,略过) 目前,Qt中设置窗口模态是通过 QWidget 的 setWindowModality() 函数: 参数有三种枚举: