目录
一、概念
对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt常用的内置对话框有:QFiledialog(文件对话框)、QColorDialog(颜色对话框)、QFontDialog(字体对话框)、QInputDialog(输入对话框)和QMessageBox(消息框)
二、对话框的分类
2.1 模态对话框
模态对话框指的是:显示后无法与父窗口进行交互,是一种阻塞式的对话框。使用QDialog::exec()函数调用。模态对话框使用于必须依赖用户选择的场合,如消息显示、文件选择,打印设置等
代码示例
在菜单项中,点击菜单项时就会触发triggered()信号
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QMenuBar* menubar = menuBar();
this->setMenuBar(menubar);
QMenu* menu1 = new QMenu("文件");
QMenu* menu2 = new QMenu("编辑");
menubar->addMenu(menu1);
menubar->addMenu(menu2);
QAction* action = new QAction("新建");
menu1->addAction(action);
QToolBar* toolbar = new QToolBar(this);
this->addToolBar(toolbar);
toolbar->addAction(action);
//当点击新建时,弹出一个模态对话框
connect(action, &QAction::triggered, [=](){
QDialog dialog;
dialog.resize(300, 200);
dialog.exec();
});
}
MainWindow::~MainWindow()
{
delete ui;
}
2.2 非模态对话框
非模态对话框显示后独立存在,可以同时与父窗口进行交互,是一种非阻塞式对话框,使用QDialog::show()函数调用
非模态对话框一般在堆上创建,若创建在栈上,弹出的非模态对话框就会一闪而过。
需设置Qt:WA_DeleteOnClose属性,目的是:当创建多个非模态对话框时(如打开了多个非模态窗口),为了避免内存泄漏要设置此属性
非模态对话框适用于特殊功能设置的场合,如查找操作,属性设置等
//当点击新建时,弹出一个模态对话框
connect(action, &QAction::triggered, [=](){