QDialog

匿名 (未验证) 提交于 2019-12-03 00:20:01

对话框通常是顶层窗口,出现在程序最上层,实现短期任务和用户交互。

QDialog(及其子类,以及所有Qt::Dialog类型的类)的对于其 parent 指针都有额外的解释:

如果 parent 为 NULL,则该对话框会作为一个顶层窗口,否则则作为其父组件的子对话框(此时,其默认出现的位置是 parent 的中心)。

  顶层窗口与非顶层窗口的区别在于,顶层窗口在任务栏会有自己的位置,而非顶层窗口则会共享其父组件的位置,无任务栏图标。

1、对话框类型?

模态和非模态,Qt 有两种级别的模态对话框:应用程序级别的模态和窗口级别的模态默认是应用程序级别的模态。

应用程序级别的模态是指,当该种模态的对话框出现时,用户必须首先对对话框进行交互,直到关闭对话框,然后才能访问程序中其他的窗口。

窗口级别的模态是指,该模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其它窗口交互。

2、如何实现模态对话框和非模态?

QT使用QDialog::exec实现对话框的应用程序级别的模态

QDialog::open()实现窗口级别的模态对话框

使用QDialog::show()实现非模态对话框。

例子1

void MainWindow::open()

{

QDialog dialog(this);

dialog.setWindowTitle(tr("Hello, dialog!"));

dialog.show();

}//窗口一闪而过

show函数不会阻塞当前线程,对话框会一闪而过,原因dialog建立在栈上,退出作用域,会被析构,窗口不存在。

解决办法

创建堆上的对话框

堆上创建,必须释放内存。如何实现

dialog 的

dialog(this);

不用动态申请,基类控件释放的时候自动释放子类控件。窗口会一直显示的模态对话框

show也可以实现模态对话框:

QDialog *

dialog->setModel(true);

dialog->show();

主窗口和此模态对话框可以同时显示,exec只能显示对话框一个,关闭其他窗口才会显示。

文章来源: QDialog
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!