Fork me on GitHub

Qt 模态窗口

QDialog是各种对话框的基类,其继承自QWidget,对话框有两种表现形式:模态对话框、非模态对话框。

模态对话框:模态对话框就是阻塞同一应用程序中其它可视窗口的输入的对话框。用户必须完成当前对话框中的交互操作并且关闭窗口后才能操作应用程序中的其它窗口。模态对话框有它们自己的本地事件循环。exec()方法可使窗口以模态方式运行。当用户关闭这个对话框,exec()将提供一个可用的返回值并且这时流程控制继续从调用exec()的地方进行。通常,我们连接默认按钮,例如“OK”到accept()槽并且把“Cancel”连接到reject()槽,来使对话框关闭并且返回适当的值。另外我们也可以连接done()槽,传递给它Accepted或Rejected。

非模态对话框:当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。非模态对话框(Modeless Dialog)的概念是一个概念,不仅仅Qt中具有,在其他不同的平台下 也都存在。但是叫法可能有区别,例如模式对话框,无模式对话框等。

 

模态窗口运行:

(1)调用exec()方法,如

QDialog dlg;

dlg.exec();

 

(2)调用setModal()方法设置模态,如

QDialog dlg;

dlg.setModal(true);

dlg.show();

 

(3)setWindowModality() 方法

QWidget widget;

widget.setWindowModality(Qt::ApplicationModal);                             

widget.show();

阻塞方式

阻塞效果

Qt::ApplicationModal

阻塞应用程序的所有窗口

Qt::WindowModal

阻塞阻塞父窗口、祖先窗口及它们的子窗口

Qt::NoModal

不阻塞,默认值

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-03-30 15:24  索智源  阅读(1495)  评论(0编辑  收藏  举报