阅读导航
- 引言
- 一、对话框
- 1. 对话框的分类
- (1)模态对话框
- (2)非模态对话框
- 二、Qt内置对话框
引言
在上一篇文章中,我们深入探讨了Qt框架中窗口的基本构建块,它们共同构成了Qt应用程序中用户界面(UI)的坚实基础。
今天,我们将继续这一探索之旅,但将焦点转向Qt中另一个至关重要的组成部分——对话框(Dialog)。对话框是应用程序与用户之间交互的重要桥梁,它们用于收集用户输入、提供选项选择、显示警告或错误信息等多种场景。Qt框架为我们提供了一系列内置的对话框,这些对话框经过精心设计,不仅功能强大,而且易于集成到任何Qt应用程序中。
一、对话框
在图形用户界面(GUI)程序中,对话框扮演着至关重要的角色,它们作为实现特定功能或用户交互的容器,通常不适合直接集成在主窗口中。对话框作为顶层窗口,能够自动置于程序界面的最上层,确保用户的注意力集中,适用于处理短期任务或需要简洁交互的场景。
1. 对话框的分类
🎯对话框分为模态对话框 和 非模态对话框。
(1)模态对话框
模态对话框是一种在显示时阻止用户与父窗口或其他窗口进行交互的对话框,它采用阻塞式机制。在Qt框架中,可以通过调用QDialog::exec()
函数来显示模态对话框。这种对话框非常适用于那些需要用户做出明确选择或输入后才能继续进行的场景,比如显示重要消息、要求用户选择文件、配置打印设置等。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
Mainwindow::Mainwindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 当点击“新建”时,弹出一个模态对话框
// 在菜单项中,当点击之后就会触发triggered信号
connect(ui->actionNew, &QAction::triggered, [=](){
QDialog dlg(this);
dlg.resize(200, 100);
dlg.exec();
});
}
(2)非模态对话框
非模态对话框在显示后独立存在,允许用户与父窗口或其他应用程序窗口同时交互,它不会阻塞用户的操作流程,是一种非阻塞式的对话框。在Qt中,非模态对话框通常通过调用QDialog::show()
函数来显示。
由于非模态对话框需要在用户明确关闭之前持续存在,并且可能跨越多个事件循环,因此它们通常在堆上创建(使用
new
关键字分配内存)。相比之下,如果在栈上创建非模态对话框,它将在包含它的函数返回时被销毁,这会导致对话框几乎立即消失,即所谓的“一闪而过”。
为了避免在堆上创建多个非模态对话框时可能发生的内存泄漏问题,建议为每个对话框设置Qt::WA_DeleteOnClose
属性。该属性的作用是在对话框窗口关闭时自动触发其析构函数,从而安全地释放对话框对象所占用的内存资源。
非模态对话框非常适合那些不需要立即中断用户当前操作,但需要用户在适当时候进行输入、选择或配置的场景。例如,在文本编辑器中查找文本、在应用程序中设置用户偏好或配置选项时,非模态对话框都能提供灵活且不打扰用户体验的交互方式。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
Mainwindow::Mainwindow(QWidget *parent)
: QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->actionNew, &QAction::triggered, [=](){
// 非模态对话框,为了防止一闪而过,创建在堆区
QDialog *dlg = new QDialog(this);
dlg->resize(200, 100); // 调整非模态对话框尺寸
/* 当dlg不断创建时(即一直不断的打开关闭窗口),
设置下面这个属性就可以在关闭非模态对话框时释放这个对象 */
dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg->show();
});
}
二、Qt内置对话框
Qt框架提供了一系列内置的对话框,极大地简化了开发者的工作。这些常用的内置对话框包括:
QFileDialog
:文件对话框,用于打开或保存文件,允许用户浏览文件系统并选择文件。QColorDialog
:颜色对话框,允许用户从调色板中选择颜色,或者通过颜色选择器自定义颜色。QFontDialog
:字体对话框,使用户能够选择字体、大小、样式等属性,以应用于文本显示或编辑。QInputDialog
:输入对话框,用于从用户那里获取简单的文本输入或选择,如数字、字符串或列表中的项目。QMessageBox
:消息框,用于显示信息、警告、错误或询问用户意见,支持多种图标和按钮配置。
关于上面这些窗口我后面会详细介绍, 关注作者不错过