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各个标志含义汇总相关推荐

  1. 【Qt】Qt学习资料汇总

    00. 目录 文章目录 00. 目录 01. Qt官网 02. 编码风格 03. GitHub & Third-Party 04. 社区论坛 05. 参考博客 06. 书籍 附录 01. Qt ...

  2. 【Qt】Qt之网格布局

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 常用函数详解 04. Qt设计师使用网格布局 05. 使用代码实现网格布局 06. 附录 01. 概述 QGridLayo ...

  3. 【Qt】Qt发展历史

    00. 目录 文章目录 00. 目录 01. Qt是什么 02. Qt的历史 03. Qt和KDE 04. Qt和智能手机 05. Qt历史发展 06. 附录 01. Qt是什么 Qt是跨平台的开发库 ...

  4. Qt开发-QT Quick

    前言 QT Quick和Qt widgets这两种技术,官方是强推QT Quick的. QT Quick中布局一般有如下四种方式, 绝对坐标:x.y.z.width.height.top.left 锚 ...

  5. 【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. ...

  6. 【Qt】Qt样式表总结(四):CSS盒子模型

    官网:http://doc.qt.io/qt-5/stylesheet-customizing.html#box-model [Qt]Qt样式表总结(一):选择器 [Qt]Qt样式表总结(二):冲突和 ...

  7. 【Qt】Qt样式表总结(三):QObject 属性

    [Qt]Qt样式表总结(一):选择器 [Qt]Qt样式表总结(二):冲突和命名空间 QObject 属性 可以使用 qproperty < 属性名称 > 语法,设置任何可以Q_PROPER ...

  8. 【Qt】Qt程序编译成功,执行时报错:程序异常结束,crashed

    [Qt]Qt程序编译成功,执行时报错:程序异常结束,crashed 错误打印信息 Starting E:*exe- 程序异常结束. E:*.exe crashed. 原因 使用到外部库,编译时,指定了 ...

  9. 【Qt】Qt Creator中文输入设置

    #[Qt]Qt Creator中文输入设置 一.ubuntu中文输入法的设置 1.在终端中输入: $ ibus-setup 弹出界面如图: 2.选择中文输入法 3.点击右上角设置–>选择系统设置 ...

最新文章

  1. decfloat转换成oracle种类型,Oracle GoldenGate 19.1新特性
  2. IOS开发笔记5-C语言基础复习
  3. Oracle 简单树查询
  4. tensorflow随笔-tf.no_op
  5. CTR点击率预估干货分享
  6. 什么镜头最适合拍风景_35mm F1.8定焦镜头,拍人拍风景都可以!
  7. 验证客户端和服务端可以传输经SM4加密的密文数据,从而验证发送数据已使用服务器密码机进行SM4加密,而不是随便的字符串乱码
  8. 代码的自动生成...
  9. [The Diary] 11.9 The Final Day
  10. 全国计算机二级vb试题库,全国计算机等级考试题库之二级VB试题
  11. MATLAB/Simulink 基础入门讲解(一)
  12. 飞鸽传书2007绿色版,提取、识别不同的重点
  13. php做个电影推荐系统,基于web个性化电影推荐系统
  14. 有了这些组件和模板,天下没有难做的移动端驾驶舱
  15. 浅谈go语言交叉编译
  16. Flutter对话框(AlertDialog,SimpleDialog,showModalBottomSheet,showToast)以及定时器
  17. 用python画五角星、填充不了颜色_python的turtle画五角星内部不能填充的解决办法...
  18. ABAP推送企业微信机器人1-文本类型
  19. 基于PCIe的通用信号处理板PCIe-KU040-FMC
  20. 数据结构 | 算法中的卡特兰数的应用

热门文章

  1. mysql 更新索引_MySQL索引优化
  2. FPGA学习之路—应用程序—原码二位乘法器及Verilog代码分析
  3. python开发笔记软件_图解Python编程神器Jupyter Notebook
  4. java opencv人脸识别_java+opencv+intellij idea实现人脸识别
  5. Dividing the numbers CodeForces - 899C (构造)
  6. Linux 下shell中exec解析
  7. jquery弹出插件
  8. atcoder 076
  9. 正念奇迹(一则正能量)
  10. 重操JS旧业第十一弹:BOM对象