部件基类QDialog
- QDialog是各种对话框的基类,其继承自QWidget,对话框有两种表现形式:
- 模态对话框、非模态对话框。模态对话框就是阻塞同一应用程序中其它可视窗口的输入的对话框。用户必须完成当前对话框中的交互操作并且关闭窗口后才能操作应用程序中的其它窗口。模式对话框有它们自己的本地事件循环。exec()方法可使窗口以模态方式运行。当用户关闭这个对话框,exec()将提供一个可用的返回值并且这时流程控制继续从调用exec()的地方进行。通常,我们连接默认按钮,例如“OK”到accept()槽并且把“Cancel”连接到reject()槽,来使对话框关闭并且返回适当的值。另外我们也可以连接done()槽,传递给它Accepted或Rejected。
模态窗口运行:
(1)调用exec()方法,如:
QDialog dlg;
dlg.exec();
(2)调用setModal()方法设置模态,如:
QDialog dlg;
dlg.setModal(true);
dlg.show();
(3)QWidget widget;
widget.setWindowModality(Qt::ApplicationModal);
widget.show();
阻塞方式 | 阻塞效果 |
---|---|
Qt::ApplicationModal | 阻塞应用程序的所有窗口 |
Qt::WindowModal | 阻塞阻塞父窗口、祖先窗口及它们的子窗口 |
Qt::NoModal | 不阻塞,默认值 |
窗口交互
#include "mainwindow.h"
#include <QApplication>
#include <dialog.h>
#include <QDebug>
int main(int argc, char *argv[]){
QApplication a(argc, argv);
int ret;
Dialog dia;
ret = dia.exec(); //以模态方式运行, 并把返回值赋值给ret
if(ret == QDialog::Accepted){ //判断返回值
MainWindow w;
w.show(); //如果返回值为QDialog::Accepted,就显示主窗口
return a.exec();
}else{
return 0;
}
}