3. Qt中窗体show()和exec()的异同
一、Qt中的窗体有两种状态:模态(Modal Dialog)和非模态(Modeless Dialog)
1.模态窗体:在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。
2.非模态窗体:当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗***互。
二、模态和非模态窗体的显示
1.使用exec()方法,它总是以模态来显示对话框。
2.使用show()方法,它使得对话框既可以模态显示,也可以非模态显示,决定它是模态还是非模态的是对话框的modal属性。
三、modal属性定义如下
1.使用exec()方法显示对话框的话,将忽略modal属性值的设置并把对话框设置为模态对话框。
2.默认情况下对话框的该属性值是false,这时通过show()方法显示的对话框就是非模态的。而如果将该属性值设置为true,就设置成了模态对话框。 其作用于把QWidget::windowModality属性设置为Qt::ApplicationModal。
模态对话框
MyDialog myDlg; myDlg.exec();//设置为模态对话框,最简单的就是使用exec()方法 MyDialog myDlg; myDlg.setModal(true); myDlg.show();//设置为模态对话框,通过改变model的属性
非模态对话框
MyDialog myDlg; myDlg.setModal(false); myDlg.show();//设置为非模态对话框,指定model属性为false MyDialog myDlg; myDlg.show();//设置为非模态对话框,model属性默认为false,也可以不指定 MyDialog myDlg; myDlg.setModal(); myDlg.show();//设置为非模态对话框,model属性默认为false,也可以不指定