定义
模态对话框就是在没有关闭它之前,不能与同一个应用程序的其他窗口进行交互。
非模态对话框就是既可以与它交互也可以与同一个应用程序的其他窗口进行交互。
下面看《Qt快速入门第三版》里项目03/3-3的例子
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
namespace Ui {
class MyWidget;
}
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
~MyWidget();
private:
Ui::MyWidget *ui;
};
#endif // MYWIDGET_H
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDialog>
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
QDialog *dialog = new QDialog(this); //建立对话框
dialog->setModal(true); //设置模态
dialog->show();
}
MyWidget::~MyWidget()
{
delete ui;
}
对于为什么MyWidget类是这样构造的,Ui::MyWidget是怎么来的,具体可以看到第二章的内容。
温馨提醒:一定要了解了大致框架后再来看下面的内容,否则就是浪费时间!!!
在MyWidget类的设计里,在构造函数里设置了ui之后,就建立了对话框。然后重点来了,设置对话框的模态有两种方法。
方法一:
直接调对话框的show(),这样的效果是非模态。但要注意的是如果要这样做,请你用new的方式来创建对话框。因为在构造函数内定义变量,那么在构造函数结束后这个变量也会变释放掉。
调对话框的exec(),这样的效果是模态,但这样做有一个不好的地方是除了这个对话框,其他的窗口都会被暂时挂起,只有在该对话框关闭后才显示。
方法二:
如上述代码所示,调setModal(),参数true就是模态,false非模态。这样的好处就是避免了其他窗口的挂起,但是还是要new,new一下挺好的~。