Qt::WindowModal和Qt::ApplicationModal的区别
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的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++11标准出现后,函数指针写法汇总
- 下一篇: QEventLoop的简单使用(一)