Qt::WindowModal和Qt::ApplicationModal的区别
Qt::WindowModal和Qt::ApplicationModal都是彈出模態(tài)窗體,但是Qt::WindowModal和Qt::ApplicationModal的模態(tài)影響的范圍不同。
- 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.
意思是說:設(shè)置為?Qt::WindowModal標(biāo)志窗體的模態(tài)特性僅僅是作用于本窗體所在的繼承層次所在窗體,當(dāng)本窗體彈出時(shí),如果用戶不響應(yīng)本窗體,則本窗體的父窗體、上層的多個(gè)祖先窗體、本窗體的兄弟窗體及兄弟窗體的父窗體及其上層的多個(gè)祖先窗體的輸入、響應(yīng)都會(huì)被阻塞、掛起,也就是說Qt::WindowModal標(biāo)志只波及到本窗體的繼承層次上。
- Qt::ApplicationModal在Qt幫助文檔中的解釋如下:
The window is modal to the application and blocks input to all windows.
意思是說:設(shè)置為?Qt::ApplicationModal標(biāo)志窗體的模態(tài)特性作用在整個(gè)應(yīng)用程序級(jí)別。只要本窗體得不到用戶響應(yīng),則該應(yīng)用程序所有其它窗體,用戶都無法操作,即其它窗體都不響應(yīng)用戶的輸入操作(如:鍵盤、鼠標(biāo)操作)。
說白了,?Qt::ApplicationModal范圍更廣,涉及到整個(gè)應(yīng)用程序范圍;Qt::WindowModal標(biāo)志只波及到本窗體的繼承層次上。我們常用的QDialog一般都是Qt::WindowModal。
下面舉例測(cè)試下:
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); }現(xiàn)象如下:
QtGuiApplication1窗體不關(guān)閉時(shí),在QtWidgetsClass窗體上單擊鼠標(biāo)、敲擊鍵盤沒有任何反應(yīng)
而將上面的:
setWindowModality(Qt::ApplicationModal);?改為:
setWindowModality(Qt::WindowModal);QtGuiApplication1窗體不關(guān)閉時(shí),在QtWidgetsClass窗體上單擊鼠標(biāo)、敲擊鍵盤有反應(yīng)
總結(jié)
以上是生活随笔為你收集整理的Qt::WindowModal和Qt::ApplicationModal的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++11标准出现后,函数指针写法汇总
- 下一篇: 河洛群侠传最强刀法(如何评价单机游戏作品