模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在。又有叫法是称为模式对话框,无模式对话框等。 所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。对于非模态对话框,当被打开时,用户既可选择和 该对话框进行交互,也可以选择同应用程序的其他窗口交互。
在Qt中,显示一个对话框一般有两种方式,一种是使用exec()方法,它总是以模态来显示对话框;另一种是使用show()方法,它使得对话框既可以模态显示,也可以非模态显示,决定它是模态还是非模态的是对话框的modal属性。
在Qt中,Qt的模态与非模态对话框选择是通过其属性modal来确定的。我们来看看modal属性,其定义如下:
modal : bool默认情况下,对话框的该属性值是false,这时通过show()方法显示的对话框就是非模态的。而如果将该属性值设置为true,就设置成了模 态对话框,其作用于把QWidget::windowModality属性设置为Qt::ApplicationModal。
而使用exec()方法显示对话框的话,将忽略modal属性值的设置并把对话框设置为模态对话框。
一般使用setModal()方法来设置对话框的modal属性。
我们总结一下设置对话框为模态的方法。
◆ 如果要设置为模态对话框,最简单的就是使用exec()方法,示例代码如下:
MyDialog myDlg; myDlg.exec();也可以使用show()方法,示例代码如下:
MyDialog myDlg; myDlg.setModal(true); myDlg.show();
◆ 如果要设置为非模态对话框,必须使用show()方法,示例代码如下:
MyDialog myDlg; myDlg.setModal(false);
//或者
myDlg.setModal();
myDlg.show();
再次强调,目前有的朋友对于模态对话框和非模态对话框的认识有误解,认为使用show()方法显示的就是非模态对话框,这是不正确的。
小贴士:有时候,我们需要一个对话框以非模态的形式显示,但又需要它总在所有窗口的最前面,这时可以通过如下代码设置:
MyDialog myDlg; myDlg.setModal(false);
//或者
myDlg.setModal(); myDlg.show();
//关键是下面这行
myDlg.setWindowFlags(Qt::WindowStaysOnTopHint);
在Qt中创建模态对话框,主要用到了QDialog的exec函数:
SonDialog dlg(this);
int res = dlg.exec();
if (res == QDialog::Accepted)
{
QMessageBox::information(this, “INFORMATION”, “You clicked OK button!”);
}
if (res == QDialog::Rejected)
{
QMessageBox::information(this, “INFORMATION”, “You clicked CANCEL button!”);
}
正如上面代码所显示的,可以通过exec函数的返回值来判断用户点击了哪个按钮使得模态对话框退出的,这可以使得我们能够根据用户的不同行为在推出退出模态对话框之后采取不同的处理方法。
在Qt中创建非模态对话框,主要用到了QDialog的show函数:
SonDialog *dlg;
dlg = new SonDialog(this);
dlg->show();
由上面代码,细心的读者可能就会问了,既然new了,如果不delete,那么内存不就存在了泄露的问题了吗?确实如此!所以,我们希望该Qt窗口在退出时自动能够delete掉自己,因此,我们在SonDialog的构造函数里,添加这样的一句代码:
setAttribute (Qt::WA_DeleteOnClose);
这样,我们的SonDialog就能够在它退出时自动的delete掉自己了,不会再造成内存泄漏问题。
原链:http://wangjiajun53880.blog.163.com/blog/static/11700139420110319573769/
分享到:
相关推荐
在Qt编程中,主界面与对话框的交互是常见的应用场景,无论是模态还是非模态对话框,它们都用于向用户展示特定的信息或收集用户的输入数据。本篇将详细讲解如何在Qt主界面中获取模态和非模态对话框的数据。 首先,让...
本话题关注的是如何在关闭子模态对话框后刷新其父模态对话框,这是一个典型的前端开发问题,主要涉及到JavaScript和可能的框架如jQuery、React、Vue或Angular等。 首先,我们需要理解模态对话框的工作原理。模态...
在QML(Qt Quick)中,自定义模态对话框是一种常见的需求,它允许开发者创建具有独特设计和功能的交互式界面元素。不同于标准的`Popup`组件,自定义模态对话框通常需要更高的定制性,以满足特定的用户体验或项目需求...
本示例程序主要展示了如何在QT主界面中调用模态对话框。在QT中,我们可以使用QDialog类来创建自定义的模态对话框。QDialog是所有模态对话框的基础类,它提供了一个弹出式界面,用户必须先处理这个对话框才能继续与主...
在"QT主界面调用非模态对话框编程源码"这个主题中,我们将探讨如何在QT程序中实现主界面调用非模态对话框的过程。首先,你需要创建一个继承自`QDialog`的自定义对话框类,定义对话框的布局、控件以及所需的功能。这...
模态对话框(Modal Dialog)是一种阻塞式对话框,当用户与对话框交互时,阻止用户与应用程序的其他部分进行交互。在用户关闭模态对话框之前,主窗口和其他窗口将无法响应用户输入。 以下是如何创建和使用模态对话框...
Qt主界面获取非模态对话框数据的方法。
在Qt Quick QML中,创建自定义窗口或者模态对话框是一种常见的需求,尤其是在开发具有用户交互性的桌面或移动应用时。QML提供了一种声明式编程的方式,使得UI设计和逻辑控制变得直观且灵活。下面我们将深入探讨如何...
4. Qt框架下的模态对话框: 在Qt中,`QDialog`类提供了`exec()`方法来显示模态对话框。数据交换可以通过信号和槽机制进行,这是Qt的一种强大的异步通信方式。当用户在对话框中做出改变时,可以发射信号,由主程序的...
在本例中,“创建模态对话框--对话框”是一个关于如何在编程环境中构建模态对话框的教学实例。 模态对话框(Modal Dialog Box)是对话框的一种类型,它强制用户在关闭对话框之前必须与之交互。这意味着用户不能访问...
调用DLL文件中的对话框_一个DLL的能成功_一个DLL不能成功DllDialogTest VS2010写的 一个基于对话框的MFC程序 然后创建两个常规动态DLL文件 在DLL文件中分别添加对话框 ...均为非模态调用.... C++
在本文中,我们将深入探讨如何在Qt环境中实现一个无边框对话框,同时保留系统边框功能,如拖拽移动、四边拖动大小调整、双击放大以及模态对话框的抖动效果。Qt是一个跨平台的应用程序开发框架,广泛应用于C++编程,...
建立模态对话框,用于设置主窗口的表格行数和列数,并用于删除对话框对象,释放内存。 (2)设置表头标题 在对话框编辑表头标题后,主窗口获取编辑之后的表头标题,对话框以模态形式存在。 (3)定位单元格 在...
5. **模态与非模态对话框**:模态对话框会阻塞父窗口,直到对话框关闭,用户才能继续操作;而非模态对话框则允许用户同时与对话框和父窗口交互。在创建QDialog时,通过设置`setModal()`方法的参数可以选择对话框的...
模态对话框和非模态对话框在Qt中都通过`QDialog`类实现,它们的区别在于是否阻塞父窗口的交互。模态对话框适用于需要用户立即响应的情况,而非模态对话框则适用于需要后台操作或长时间显示的场景。理解并熟练掌握这...
而非模态对话框则允许用户同时与对话框和其他窗口进行交互。在适当的情况下选择合适的对话框类型至关重要,以确保良好的用户体验。 8. **自定义对话框** QT提供了QDialog类,可以继承该类来创建自定义对话框,以...
在QT中,`QDialog`类是模态对话框的基础,你可以通过继承`QDialog`创建自定义的模态对话框。例如,你可以创建一个`MyDialog`类,重写其`exec()`函数来实现模态对话框的行为。 其次,文件对话框(File Dialog)在很...
在Qt中,对话框有两种主要类型:模态对话框(Modal Dialogs)和非模态对话框(Modeless Dialogs)。模态对话框会阻塞父窗口,直到用户与其交互并关闭它,而非模态对话框允许用户同时与对话框和主窗口进行交互。 1. ...
简介:本人学习Qt一个星期了,利用Qt做的仿360界面,然后打包成动态库。 用C++的MFC对话框按钮调用Qt界面动态库,经测试成功。
在Qt中,可以继承`QDialog`并重写`exec`方法,而在Java Swing中,可以使用`JDialog`类来创建非模态对话框。 三、系统对话框(System Dialog Box) 系统对话框是由操作系统提供的标准对话框,例如“打开文件”、...