模式对话框:在没有关闭它之前,不能与同一个应用程序的其他窗口进行交互;比如新建项目时弹出的对话框。
非模式对话框:可以与其他窗口进行交互,比如查找替换对话框。
举例:
#include"mywidget.h"
#include "ui_mywidget.h"
#incldue<QDialog>
MyWidget::MyWidget(QWidget *parent):QWidget(parent),ui(new Ui::MyWidget)
{
ui->setupUi(this);
QDialog dialog(this);
dialog.show();
}
程序中指定dialog的父窗口为MyWidget对象,运行时发现一个窗口一闪而过,这是因为dialog只是一个在函数中定义的局部变量,当函数结束的时候,dialog也消失。
程序可以修改如下:
(1)方法1:
QDialog *dialog=new QDialog(this);
dialog->show(); //dialog是指向QDialog类的一个指针变量。
显示的对话框是非模态对话框。
(2)方法2:
QDialog dialog(this);
dialog.exec();
此时只有关闭这个对话框,MyWidget的窗口才能弹出来,所以叫做模态对话框。
总结:
要想使一个窗口成为模态对话框,只需要要调用它的的exec()函数,而想它成为非模态对话框,可以使用new来创建,用show()来显示。
show()也可以创建模态的,只需要在其前面是用setModal()即可。如:
QDialog *dialog=new QDialog(this);
dialog->setModel(true);
dialog->show();