- Qt对话框窗口的基类,由QWidget派生
- 是独立的窗口,不能内嵌
QDialog帮助文档介绍如下:
A dialog is always a top-level widget, but if it has a parent, its default location is centered on top of the parent.
It will also share the parent's taskbar entry.
如果 parent 为 NULL,则该对话框会作为一个顶层窗口,否则则作为其父窗口的子对话框,并默认出现在父窗口的中心位置。
顶层窗口与非顶层窗口的区别在于,顶层窗口在任务栏会有自己的位置,而非顶层窗口则会共享其父窗口的位置。
(1)指定父对象时
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)//指针实例化
{
ui->setupUi(this);
//创建对话框窗口,并指定父对象
TestDialog* dlg = new TestDialog(this);
//非模态
dlg->show();
}
显示结果为:
当关闭主窗口时,对话框随之关闭。
(2)不指定父对象时
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)//指针实例化
{
ui->setupUi(this);
//创建对话框窗口,不指定父对象
TestDialog* dlg = new TestDialog;
//非模态
dlg->show();
}
显示结果为:
运行后的结果为,对话框在主窗口的下层,需要把主窗口移走才能看到。
当关闭主窗口时,对话框依然存在。
- 有两种显示方式:模态和非模态
(1)模态对话框
模态对话框是这样的对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。
简单来说,焦点只能在当前窗口,不能切换到其他窗口。
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)//指针实例化
{
ui->setupUi(this);
//创建对话框窗口
TestDialog* dlg = new TestDialog(this);
//模态,exec()
//阻塞程序的执行
dlg->exec();
}
在这个例子中,对话框窗口的创建在主窗口的构造函数中,运行后会先显示对话框,当对话框关闭时才会显示主窗口。这是因为dlg->exec();
会阻塞程序的执行。
(2)非模态对话框
非模态对话框则是,它弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等。
简单来说,焦点可以在窗口之间进行切换,一般查找替换窗口为非模态窗口。
//创建对话框窗口
TestDialog* dlg = new TestDialog(this);
//非模态
dlg->show();
qt基础知识持续学习中,我们一起学习吧!