- 定义了一个对象,是指 QDialog dialog
- QDialog *dialog,不能称为定义了一个对象,而应该说成定义了一个QDialog类对象的指针变量
- 后面也会把 QDialog *dialog; 说成定义了一个QDialog对象
- 在没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互
- 简单一点讲就是在弹出模态对话框时,除了该对话框整个应用程序窗口都无法接受用户响应,处于等待状态,直到模态对话框被关闭。这时一般需要点击对话框中的确定或者取消等按钮关闭该对话框,程序得到对话框的返回值(即点击了确定还是取消),并根据返回值进行相应的操作,之后将操作权返回给用户。这个时候用户可以点击或者拖动程序其他窗口。说白了就相当于阻塞同一应用程序中其它可视窗口的输入的对话框,用户必须完成这个对话框中的交互操作并且关闭了它之后才能访问应用程序中的其它窗口。其实模态对话框的作用就是得到用户选择的结果,根据结果来进行下面的操作。
- 又叫做无模式对话框,即弹出非模态对话框时,用户仍然可以对其他窗口进行操作,不会因为这个对话框未关闭就不能操作其他窗口。
- 既可以与它交互,也可以与同一程序的其他窗口交互 要想使一个对话框成为模态对话框,则只需要调用它的 exec() 函数;
- 而要使其成为非模态对话框,则可以使用new操作来创建,然后使用 show() 函数来显示 使用 show() 函数也可以建立模态对话框,只需在其前面使用 setModal() 函数即可。
cpp文件:
#include "mywidget.h"
#include "ui_mywidget.h"
#include
#include
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::MyWidget)
{
ui->setupUi(this);
// QDialog dialog(this);
// dialog.show();//一闪而过
//非模态对话框,运行时,两个窗口可以自由切换(测试1)-----测试模态,就备注此段,启用模态对话框的代码----------
QDialog *dialog = new QDialog(this);
QLabel *label2 = new QLabel(dialog);
dialog->resize(300,400);
label2->setText(tr("子窗口的信息显示"));
dialog->show(); //
//非模态对话框------------------------------------------------------------------
// QDialog dialog(this);
//dialog.exec(); //关闭窗口后,才会显示主窗口
//模态对话框------------------------------------------------------------------
//模态对话框,运行时,必须完成当前窗口,关闭后,才能才做主界面(测试2)
// QDialog *dialog = new QDialog(this);
// QLabel *label2 = new QLabel(dialog);
// dialog->resize(300,400);
// label2->setText(tr("子窗口的信息显示"));
// dialog->setModal(true);
// dialog->show(); //与exec的区别是,显示后,主窗口马上显示,但关闭当前窗口后,才能操作主窗口
//模态对话框------------------------------------------------------------------
}
MyWidget::~MyWidget()
{
delete ui;
}