Qt::WindowModal和Qt::ApplicationModal都是弹出模态窗体,但是Qt::WindowModal和Qt::ApplicationModal的模态影响的范围不同。

  • Qt::WindowModal 在Qt帮助文档中的解释如下:

The window is modal to a single window hierarchy and blocks input to its parent window, all grandparent windows, and all siblings of its parent and grandparent windows.

意思是说:设置为 Qt::WindowModal标志窗体的模态特性仅仅是作用于本窗体所在的继承层次所在窗体,当本窗体弹出时,如果用户不响应本窗体,则本窗体的父窗体、上层的多个祖先窗体、本窗体的兄弟窗体及兄弟窗体的父窗体及其上层的多个祖先窗体的输入、响应都会被阻塞、挂起,也就是说Qt::WindowModal标志只波及到本窗体的继承层次上。

  • Qt::ApplicationModal在Qt帮助文档中的解释如下:

The window is modal to the application and blocks input to all windows.

意思是说:设置为 Qt::ApplicationModal标志窗体的模态特性作用在整个应用程序级别。只要本窗体得不到用户响应,则该应用程序所有其它窗体,用户都无法操作,即其它窗体都不响应用户的输入操作(如:键盘、鼠标操作)。

说白了, Qt::ApplicationModal范围更广,涉及到整个应用程序范围;Qt::WindowModal标志只波及到本窗体的继承层次上。我们常用的QDialog一般都是Qt::WindowModal。

下面举例测试下:

main.cpp如下:

#include "QtGuiApplication1.h"
#include <QtWidgets/QApplication>
#include "QtWidgetsClass.h"
int main(int argc, char *argv[])
{QApplication a(argc, argv);QtGuiApplication1 w;QtWidgetsClass k;k.show();w.show();return a.exec();
}

QtGuiApplication1.cpp如下:

#include "QtGuiApplication1.h"QtGuiApplication1::QtGuiApplication1(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);setWindowModality(Qt::ApplicationModal);}

QtWidgetsClass.cpp如下:

#include "QtWidgetsClass.h"QtWidgetsClass::QtWidgetsClass(QWidget *parent): QWidget(parent)
{ui.setupUi(this);
}

现象如下:

QtGuiApplication1窗体不关闭时,在QtWidgetsClass窗体上单击鼠标、敲击键盘没有任何反应

而将上面的:

setWindowModality(Qt::ApplicationModal);

改为:

setWindowModality(Qt::WindowModal);

QtGuiApplication1窗体不关闭时,在QtWidgetsClass窗体上单击鼠标、敲击键盘有反应

Qt::WindowModal和Qt::ApplicationModal的区别相关推荐

  1. Qt 中static_cast 和 reinterpret_cast的区别

    Qt 中static_cast 和 reinterpret_cast的区别 1. C++中的static_cast执行非多态的转换,用于代替C中通常的转换操作.因此,常做为隐式类型转换使用.比如: i ...

  2. QT [004] QT SDK 和 QT quick 和 QT creator的区别历史和沿袭

    1 前言 之前查QT的参考书,往往被QT的开发书籍定义弄蒙了,什么是QT  quick,什么是QT creator 查了某度,简直是fent了,更晕了,这边开一个文章给有这方面疑惑的初学者带个路吧 然 ...

  3. Qt界面编程-Qt简介

    一.Qt简介 Qt是什么 图形用户程序框架,是对底层应用编程接口API面向对象的封装. 是一套基于C++语言的类库,专注但不局限于图形用户界面的开发,也可以进行系统调用.网络编程.数据库.2D/3D图 ...

  4. 二选一的时候到了,Qt Widgets 还是 Qt Quick ? 致Qt开发伙伴

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Qt QWidgets 和 Qt Quick 各自有什么特性.特点? 1.Qt QWidgets 2.Qt Qui ...

  5. 为什么要用Qt开发(Qt跨平台应用开发)

    一.为什么选择qt 1.跨平台,一次写代码多个平台编译.使跨平台应用达到各个平台原生应用的体验与流畅度.相比与java或c#在开发图形计算方面的软件时有非常好的使用体验与流畅度. 2.使用C++编程虽 ...

  6. 01-为什么要用Qt开发(Qt跨平台应用开发)

    一.为什么选择qt 跨平台,一次写代码多个平台编译.使跨平台应用达到各个平台原生应用的体验与流畅度.相比与java或c#在开发图形计算方面的软件时有非常好的使用体验与流畅度. 使用C++编程虽然没有j ...

  7. Qt Widgets 和 Qt Quick / QML

    简述 Qt Widget 是Qt传统的C++界面类库: Qt Quick 是Qt新生的QML界面类库: QML(Qt Modeling Language)是一种用户界面规范的声明式语言,用于替换Qt ...

  8. linux qt编译器路径,QT学习之一:Linux下安装QT之版本qt

    在Linux中分别安装应用于不同平台的QT:PC:嵌入式X86:ARM. 这三者PC版.嵌入式X86版和ARM版的区别主要体现在:当configure时分别加了不同的参数,具体区别是:PC平台:在li ...

  9. Squish for Qt:为Qt应用量身打造的自动化测试工具

    转载地址:https://mp.weixin.qq.com/s?__biz=MzI5MzA3NzU3OA==&mid=2649661399&idx=1&sn=7b584cfc5 ...

最新文章

  1. Nokia Device Specifications
  2. Linux中断与进程切换,结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程...
  3. 如何向Spring Bean 中注入java.util.Properties?
  4. MFC内嵌web页面
  5. NGINX前端代理TOMCAT取真实客户端IP
  6. Django从理论到实战(part34)--聚合函数
  7. H.264的CAVLC(编码.解码)过程详解
  8. c语言jt808协议库,平台如何应答——关于JT/T808协议
  9. 【Elasticsearch】 es Bootstrap Checks Failed
  10. linux:文件及目录管理
  11. jenkins 设置 gitlab web hooks
  12. 【转】单循环赛赛程安排算法研究
  13. 【Cubase11】音乐工作站:宿主软件 - 基础入门笔记
  14. box-shadow属性详解
  15. iOS开发之打包上传到App Store——(一)各种证书的理解
  16. 从“机器换人”到“虚拟数字员工”,我们应该担心人工智能“抢饭碗”吗?
  17. WannaCry勒索病毒分析 **下**
  18. 《7天精通直播带货》运营型主播成长型,提升直播能力与技巧
  19. 机器学习模型评估——混淆矩阵
  20. iOS小技能:监听H5页面goBack返回事件 网页监听APP返回键 (NavigationBackItemInjection)

热门文章

  1. 计算机组成与架构综述学习报告
  2. java弃用标签_Java 9 揭秘(15. 增强的弃用注解)
  3. php伪静态url运用,再谈 THINKPHP 伪静态url(URL访问模式)的设置
  4. python3解释器执行long(10)的结果为_Python3解释器执行'AB2C3D'.lower().title()的结果是( )。...
  5. php zip 编码,encoding - 用PHP如何检测一个ZIP包内的文件是在何种编码的系统下创建的...
  6. mysql trim 索引_mysql强大的trim()函数
  7. .gitignore文件_Django项目.gitignore文件建议忽略文件清单及是否需要忽略数据库迁移文件...
  8. Java中的注解--annotation
  9. java课程课后作业04之动手动脑
  10. sql 分组后按时间降序排列再取出每组的第一条记录