Qt | 模态对话框和非模态对话框 QDialog

简介: 了解Qt的模态对话框和非模态对话框的使用。

对于模态和非模态对话框的理解:

QDialog类是所有对话框窗口类的基类。对话框窗口是一个经常用来完成短小任务或者和用户进行简单交互的顶层窗口。按照运行对话框时是否还可以和改程序的其他窗口进行交互,对话框常被分成模态对话框和非模态对话框。

  • 模态对话框是在对话框关闭之前,不能再与同一个应用程序的其他窗口进行交互。
  • 非模态对话框是可以与同意程序中的窗口交互的。

创建对话框的方法:

我们创建对话框时一般会用到三种方式:

1. 使用new的方式创建一个非模态对话框:

QDialog *dialog = new QDialog(this);
dialog->show();

通过new一个QDialog对象指针,指定窗口的父窗口,调用show()函数显示出来。这样是可以正常显示的,只不过这个窗口是非模态的,他不会阻止这段代码之后的代码的正常运行。并且因为指定了父窗口,所以不需要使用delete()来释放该对象,在父窗口销毁时,会自动释放所有子窗口。

2. 定义临时变量创建一个模态对话框:

QDialog dialog(this);
dialog.exec();

通过这种方式启动一个模态对话框,在程序走到这里时,会弹出对话框,并且这段代码之后的代码将不会执行,只有在这个对话框关闭之后才会继续执行。

3. 使用new的方式创建一个模态对话框:

QDialog *dialog = new QDialog(this);
dialog->setModal(true);
dialog->show();

通过这种方式启动的对话框也是模态的,它和第一种方法的区别是调用了setModal()函数。这时虽然是模态对话框,但是在这段代码之后的代码也是可以正常执行的。是因为在调用show()函数后会立即将控制权交给调用者,程序可以继续往下执行。而调用exec()函数时,只有当对话框关闭时才会返回。

setModal()函数:

与setModal()函数功能相似的还有一个setWindowModality()函数,它有一个参数来设置模态对话框要阻塞的窗口类型,这个参数可以是:

  • Qt::NonModal()//不阻塞任何窗口,就是非模态
  • Qt::WindowModal()//阻塞它的父窗口、所有祖先窗口以及他们的子窗口
  • Qt::ApplicationModal()//阻塞整个应用程序的所有窗口

setModal()函数默认设置的是Qt::ApplicationModal。

目录
相关文章
|
6月前
|
Linux iOS开发 MacOS
19 QT - 标准文件对话框
19 QT - 标准文件对话框
33 0
|
4月前
Qt6学习笔记五(自定义对话框、QMessageBox、QColorDialog、QFileDialog、QFontDialog)
Qt6学习笔记五(自定义对话框、QMessageBox、QColorDialog、QFileDialog、QFontDialog)
44 0
|
6月前
15 QT - 对话框QDialog概述
15 QT - 对话框QDialog概述
20 0
|
3月前
|
存储
QT基础入门——QMainWindow与对话框QDialog(三)
QT基础入门——QMainWindow与对话框QDialog(三)
57 0
QT基础入门——QMainWindow与对话框QDialog(三)
|
5月前
|
数据安全/隐私保护
QT基础教程(对话框2)
QT基础教程(对话框2)
34 0
|
5月前
QT基础教程(对话框1)
QT基础教程(对话框1)
34 0
|
5月前
|
C++
C++ Qt开发:自定义Dialog对话框组件
在之前的文章中笔者已经为大家展示了默认`Dialog`组件的使用方法,虽然内置组件支持对数据的输入,但有时候我们需要一次性输入多个数据,此时如果之使用默认模态对话框似乎不太够用,此时我们需要自己创建一个自定义对话框,需要说明的是此类对话框也是一种窗体,所以可以在其上面放置任何通用组件,以实现更多复杂的开发需求。自定义对话框需要解决的问题是,如何让父窗体与子窗体进行数据交换,要实现数据的交换有两种方式,第一种方式是通过动态加载模态对话框,当用户点击确定后通过`GetValue()`来拿到数据,而第二种方式则是通过发送信号的方式将数据投递给父窗体,这两种方式都可以,读者可根据自身需求来选择不同的通
43 1
C++ Qt开发:自定义Dialog对话框组件
|
5月前
|
数据安全/隐私保护 C++ 开发者
C++ Qt开发:标准Dialog对话框组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍标准对话框`QInputDialog`、`QFileDialog `这两种对话框组件的常用方法及灵活运用。在 Qt 中,标准对话框提供了一些常见的用户交互界面,用于执行特定任务,例如获取用户输入、选择文件路径、显示消息等。这些对话框通常具有标准化的外观和行为,使得在不同的平台上能够保持一致性。在一般的开发过程中,标准对话框是开发者常用的工具之一。
51 1
C++ Qt开发:标准Dialog对话框组件
|
6月前
|
API
18 QT - 消息对话框
18 QT - 消息对话框
24 0
|
6月前
16 QT - 标准对话框
16 QT - 标准对话框
19 0