Qt::WindowType、Qt::WidgetAttribute各个标志含义汇总
Qt::WindowType标志通过如下函数设置:
setWindowFlag
或
setWindowFlags
注意:这两个函数的区别是:不加s的每次只能设置一个Qt::WindowType标志位,加s的可以用 | 设置多个Qt::WindowType。具体参见QFlags的解释。
汇总如下:
Qt::Widget:
这个很简单,如果创建时,没有父,则自己成为一个独立的窗体,此时该窗体有标题栏;如果有父,则作为子窗体嵌入到父中,嵌入到父时,标题栏都不会存在了。
Qt::Window:
当窗体设置这个标志后,窗体不管是否有父窗体,都会有标题栏和边框,不会嵌入到父窗体,如下代码:
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QWidget(parent)
{ui.setupUi(this);setWindowTitle("parent");QWidget* p = new QWidget();p->setWindowTitle("windows");p->setWindowFlag(Qt::Window);p->show();
}
窗体弹出如下:
将上面的QWidget* p = new QWidget();改为QWidget* p = new QWidget(this);即将this作为其父,依然是弹出上面的窗体。
Qt::Dialog:
等同于创建一个QDialog的窗体。
Qt::Sheet:
这个标志貌似只在mac系统下起作用,Windows下试了没啥效果,等同于设置窗体为模态窗体。Qt官方文档建议用QWidget::setWindowModality(), or QDialog::open(),函数设置,而不建议用该标志。
Qt::Drawer:
是Qt::Sheet 和 Qt::Dialog的组合,等同于Qt::Sheet | Qt::Dialog,只在mac系统下起作用,Windows系统不起作用。
Qt::Popup
按Qt文档的解释是弹出式的顶层模态窗体,有边框,但是如下代码:
#include "QtWidgetsApplication1.h"
#include "QtTestWidget.h"
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QWidget(parent)
{ui.setupUi(this);setWindowTitle("parent");QtTestWidget* p = new QtTestWidget();p->setWindowTitle("windows");setWindowFlag(Qt::Popup);p->show();}
却出现如下现象:
设置过Qt::Popup标志的窗体最顶层,没有边框,且鼠标一直转圈等待状态,单击其它窗体后,Qt::Popup标志的窗体消失不见了,原因不知道。
Qt::Tool:
该标志指示该窗体是一个工具窗口。工具窗体比普通一般窗体的标题栏小,且有时有些其它的装饰。它的典型用途是用来做工具栏。如果设置该标志的窗体有父窗体,则该标志的窗体一直在其父的上面,即置顶;如果没有父,你应该考虑为该窗体设置Qt::WindowStaysOnTopHint属性,你也可以组合Qt::FramelessWindowHint标志使用。
Qt::ToolTip:
指示包含该标志的窗体用于工具栏提示,如下代码:
#include "QtWidgetsApplication1.h"
#include "QtTestWidget.h"
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QWidget(parent)
{ui.setupUi(this);setWindowTitle("parent");QtTestWidget* p = new QtTestWidget(this);p->setWindowTitle("windows");p->setWindowFlag(Qt::ToolTip); // 设置p窗体为工具栏提示p->show();}
可以看到设置该标志后,窗体标题栏、边框都没有了
Qt::SplashScreen:
指示该窗体用作闪屏。闪屏是有些软件在主窗体弹出之前,经常会用一个无边框的小窗口弹出一些提示信息,如:加载组件或库的进度、产品信息等信息,之后该闪屏窗体小时,主程序界面显示出来。
Qt::Desktop:
指示该窗体是一个Desktop类型的窗体,它是一个QDesktopWidget类型的窗体。如下代码:
#include "QtWidgetsApplication1.h"
#include "QtTestWidget.h"
#include<QDeskTopWidget>
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QWidget(parent)
{ui.setupUi(this);setWindowTitle("parent");QtTestWidget* p = new QtTestWidget();p->setWindowTitle("windows");p->setWindowFlags(Qt::Desktop);p->show();}
则p表示的QtTestWidget不可见了。
Qt::SubWindow:
指示该窗体是一个子窗体,类似Qt的QMdiSubWindow窗体。
----------------------------------------------------------------------------------------------------------------
Qt::WidgetAttribute枚举属性用setAttribute函数设置,当该函数的第二个参数设置为true时,则设置该属性;当该函数的第二个参数设置为false,表示移除关闭该属性。下面分类说明:
Qt::WA_AcceptDrops:
窗体接受拖放,等同于调用QWidget::setAcceptDrops函数。
Qt::WA_AlwaysShowToolTips:
窗体一直显示工具栏提示。默认情况下,当为窗体设置了工具栏提示时,只有在该窗体具有焦点且鼠标移动到该窗体时才会显示工具栏提示。当窗体没有获取到焦点时,鼠标移动到其上面时不会显示工具栏提示,当设置该属性true时,即使窗体没有获取焦点,鼠标移动到其上面时,依然会显示工具栏提示。如下:
#include "QtWidgetsApplication1.h"
#include "QtTestWidget.h"
#include<QDeskTopWidget>
QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent): QWidget(parent)
{ui.setupUi(this);setWindowTitle("parent");QtTestWidget* p = new QtTestWidget();p->setWindowTitle("windows");p->setToolTip("QtTestWidget");p->setAttribute(Qt::WA_AlwaysShowToolTips);p->show();}
弹出如下:
右侧parent窗体是当前具有焦点的窗体,左侧Windows窗体没有焦点,此时鼠标移动到左侧窗体,依然显示了工具栏提示。
Qt::WA_CustomWhatsThis
按照Qt官方的解释是:是否开启whatthis提示,但是通过如下代码关掉Whatthis提示,但Whatthis依然有:
#include "QtWidgetsApplication1.h"
#include "QtTestWidget.h"
#include<QDeskTopWidget>
QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent): QWidget(parent)
{ui.setupUi(this);setWindowTitle("parent");QtTestWidget* p = new QtTestWidget();p->setWindowTitle("windows");;p->setWhatsThis(tr("Click this option to create a new file."));p->setAttribute(Qt::WA_CustomWhatsThis, false);bool b = p->testAttribute(Qt::WA_CustomWhatsThis);p->show();}
同时按住shift、F1键,依然弹出了如下whatthis提示,原因不知道
Qt::WA_DeleteOnClose
设置这个标志的窗体当窗体关闭事件closeEvent()发生时,会自动由Qt来删除该窗体对象,不用人为删除。注意:如果设置了该标志的窗体人为删除会导致崩溃,如下:
QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent): QWidget(parent)
{ui.setupUi(this);setWindowTitle("parent");p = new QtTestWidget(); // p为在.h文件中定义的成员变量p->setWindowTitle("windows");;p->setAttribute(Qt::WA_DeleteOnClose);p->show();}QtWidgetsApplication1::~QtWidgetsApplication1()
{if (p != nullptr){delete p; // qt已经删除过p,不需要再delete了,如果再delete一次,此处会奔溃}
}
这种方法有个弊端:因为这个指针Qt是没有办法自动设为nullptr,会变为野指针,这也是上面人为删除崩溃的原因。
Qt::WA_Disabled
当窗体该标志为true后,窗体的keyPressEvent、keyReleaseEvent、mouseReleaseEvent(), mouseDoubleClickEvent(), mouseMoveEvents事件都不会触发、不会响应;注意:窗体上的部件如按钮、编辑框的单击、输入等依然有效。当窗体上的小部件如按钮、编辑框等的该标志设置为true后,小部件为禁用状态,相当于调用setDisabled(true),按钮、编辑框的单击、输入等依然无效
Qt::WA_DontShowOnScreen
这个标志指示窗体隐藏或不是桌面可见区域的一部分。相当于对窗体调用hide()或setVisible(false)函数
Qt::WA_Hover
设置这个标志true后,每当鼠标进入窗体或离开窗体都会发送paint events事件,即如果窗体重写了paintEvent,则paintEvent会被调用。
Qt::WA_InputMethodEnabled
设置这个标志为true后,则开启亚洲输入法事件,Qwidget的QInputMethodEvent事件就会触发。例如:在一个密码框中禁止输入中文、日文、韩文等亚洲文字作为密码,这种情况一般我们会重写QLineEdit,但是过于复杂,下面通过设置编辑框的Qt::WA_InputMethodEnabled一句代码搞定:
ui.textEdit->setAttribute(Qt::WA_InputMethodEnabled, false);
Qt::WA_MouseTracking
设置为true后,等同调用setMouseTracking(true)
Qt::WA_OpaquePaintEvent
这个标志的解释,请参见《Qt::WA_OpaquePaintEvent理解》
Qt::WA_NoMousePropagation
这个标志的解释,请参见《Qt::WA_NoMousePropagation用法》
Qt::WA_QuitOnClose
这个标志的解释,请参见《Qt::WA_QuitOnClose用法》
Qt::WA_Resized
这个标志默认为true,当设置为false后,窗体在改变大小时,不会发送QResizeEvent事件,即resizeEvent(QResizeEvent* event)函数不会进入、不会响应,但按住鼠标能改变窗体大小。
Qt::WA_StaticContents
请参见Qt自带的例子scribble,该工程在Qt安装目录下的Examples\Qt-5.14.1\widgets\widgetsscribble 目录,官方对该例子的文档说明参见:Scribble Example | Qt Widgets 5.15.7
Qt::WA_ShowWithoutActivating
设置该标志为true后,以非激活模式显示窗体。即窗体显示出来后,但不具备焦点,即键盘事件发生时,该窗体不会收到;键盘事件不发到该窗体上。
Qt::WA_AcceptTouchEvents
设置该标志为true后,允许触摸事件( QTouchEvent)发送到该窗体。在所有能处理触摸事件的窗体上都要将该属性设置为true,如果不设置为true,则将所有的触摸事件当为鼠标事件来处理。
Qt::WA_TabletTracking
相当于调用setTabletTracking,至于什么是Tablet Tracking 请参见《Qt Designer中部件的tabletTracking和mouseTracking属性》
Qt::WindowType、Qt::WidgetAttribute各个标志含义汇总相关推荐
- 【Qt】Qt学习资料汇总
00. 目录 文章目录 00. 目录 01. Qt官网 02. 编码风格 03. GitHub & Third-Party 04. 社区论坛 05. 参考博客 06. 书籍 附录 01. Qt ...
- 【Qt】Qt之网格布局
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 常用函数详解 04. Qt设计师使用网格布局 05. 使用代码实现网格布局 06. 附录 01. 概述 QGridLayo ...
- 【Qt】Qt发展历史
00. 目录 文章目录 00. 目录 01. Qt是什么 02. Qt的历史 03. Qt和KDE 04. Qt和智能手机 05. Qt历史发展 06. 附录 01. Qt是什么 Qt是跨平台的开发库 ...
- Qt开发-QT Quick
前言 QT Quick和Qt widgets这两种技术,官方是强推QT Quick的. QT Quick中布局一般有如下四种方式, 绝对坐标:x.y.z.width.height.top.left 锚 ...
- 【Qt】Qt学习笔记(更新中)
文章目录 0x00 前言 0x01 Qt简介 1.1 Qt是什么 1.2 Qt发展史 1.3 Qt支持的平台 1.4 使用Qt开发的软件 1.5 Qt的优点 1.6 其它 0x02 创建Qt项目 2. ...
- 【Qt】Qt样式表总结(四):CSS盒子模型
官网:http://doc.qt.io/qt-5/stylesheet-customizing.html#box-model [Qt]Qt样式表总结(一):选择器 [Qt]Qt样式表总结(二):冲突和 ...
- 【Qt】Qt样式表总结(三):QObject 属性
[Qt]Qt样式表总结(一):选择器 [Qt]Qt样式表总结(二):冲突和命名空间 QObject 属性 可以使用 qproperty < 属性名称 > 语法,设置任何可以Q_PROPER ...
- 【Qt】Qt程序编译成功,执行时报错:程序异常结束,crashed
[Qt]Qt程序编译成功,执行时报错:程序异常结束,crashed 错误打印信息 Starting E:*exe- 程序异常结束. E:*.exe crashed. 原因 使用到外部库,编译时,指定了 ...
- 【Qt】Qt Creator中文输入设置
#[Qt]Qt Creator中文输入设置 一.ubuntu中文输入法的设置 1.在终端中输入: $ ibus-setup 弹出界面如图: 2.选择中文输入法 3.点击右上角设置–>选择系统设置 ...
最新文章
- decfloat转换成oracle种类型,Oracle GoldenGate 19.1新特性
- IOS开发笔记5-C语言基础复习
- Oracle 简单树查询
- tensorflow随笔-tf.no_op
- CTR点击率预估干货分享
- 什么镜头最适合拍风景_35mm F1.8定焦镜头,拍人拍风景都可以!
- 验证客户端和服务端可以传输经SM4加密的密文数据,从而验证发送数据已使用服务器密码机进行SM4加密,而不是随便的字符串乱码
- 代码的自动生成...
- [The Diary] 11.9 The Final Day
- 全国计算机二级vb试题库,全国计算机等级考试题库之二级VB试题
- MATLAB/Simulink 基础入门讲解(一)
- 飞鸽传书2007绿色版,提取、识别不同的重点
- php做个电影推荐系统,基于web个性化电影推荐系统
- 有了这些组件和模板,天下没有难做的移动端驾驶舱
- 浅谈go语言交叉编译
- Flutter对话框(AlertDialog,SimpleDialog,showModalBottomSheet,showToast)以及定时器
- 用python画五角星、填充不了颜色_python的turtle画五角星内部不能填充的解决办法...
- ABAP推送企业微信机器人1-文本类型
- 基于PCIe的通用信号处理板PCIe-KU040-FMC
- 数据结构 | 算法中的卡特兰数的应用
热门文章
- mysql 更新索引_MySQL索引优化
- FPGA学习之路—应用程序—原码二位乘法器及Verilog代码分析
- python开发笔记软件_图解Python编程神器Jupyter Notebook
- java opencv人脸识别_java+opencv+intellij idea实现人脸识别
- Dividing the numbers CodeForces - 899C (构造)
- Linux 下shell中exec解析
- jquery弹出插件
- atcoder 076
- 正念奇迹(一则正能量)
- 重操JS旧业第十一弹:BOM对象