一、主界面
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 规定的默认值。