所谓标准对话框,是Qt内置的一些列对话框,用于简化开发。其实是调用的系统窗口。事实上,有很多对话框都是通用的,比如打开文件、设置颜色、打印设置等。这些对话框在素有程序中几乎相同,因此没有必要在每一个程序中都自己实现这么一个对话框。
Qt内置的对话框大致分为以下几类:
- QColorDialog:选择颜色。
- QFileDialog:选择文件或者目录。
- QFolderDialog:选择目录。
- QFontDialog:选择字体
- QMessageDialog:消息对话框、用于显示消息、询问问题等。
1. 通用标准对话框
QMessageBox:
需要包含头文件,#include <QMessageBox>。
成员函数类型为Static Public Members,静态成员函数有两种访问方式:创建对象、通过类名调用。QMessageBox包含成员:
- 关于对话框:QMessageBox::about(this, "about", "关于Qt");
- 错误对话框:QMessageBox::critical(this, "critical", "错误");
- 信息对话框:QMessageBox::information(this, "info", "信息");
- 警告对话框:QMessageBox::warning(this, "warning", "警告");
- 提问对话框:
//返回值:用户点击的按键,利用返回值判断用户的输入 //参数1:父对象;参数2:标题;参数3:提示内容;参数4:按键类型;参数5:默认关联的回车按键 QMessageBox::question(this, "question", "是否?"); int ret = QMessageBox::question(this, "question", "是否?", QMessageBox::Ok | QMessageBox::Cancel); int ret = QMessageBox::question(this, "question", "是否?", QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel);
示例现象:
- 关于对话框:
- 错误对话框:
- 信息对话框:
- 警告对话框:
- 提问对话框:
点击按钮后,会在调试栏中输出用户选择:
2. 其他标准对话框
- 文件对话框:
需要包含头文件,#include <QFileDialog>
// 用打开的方式打开一个文件对话框 // 打印选中该的路径名称。参数:父对象,对话框标题,默认打开路径,过滤的文件格式 QString path = QFileDialog::getOpenFileName(this, "open", "../", "souce(*.cpp *.h);;Text(*.txt);;all(*.*)"); // 调试输出选择路径 qDebug() << path;
- 颜色对话框:
需要包含头文件,#include <QColorDialog>
// 默认用红色打开调色板 QColor color = QColorDialog::getColor(QColor(255,0,0)); // 调试输出RGB信息 qDebug() << color.red() << color.green() << color.blue();
- 字体对话框:
需要包含头文件,#include <QFontDialog>
// 默认用16号宋体打开字体对话框 bool flag; QFont font = QFontDialog::getFont(&flag, QFont("宋体",16)); // 调试输出字体、字号、加粗、倾斜 qDebug() << font.family().toUtf8().data() << font.pointSize() << font.bold() << font.italic();
示例:
代码:
mainwindow.h:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QMenu> #include <QMenuBar> #include <QAction> #include <QDialog> #include <QDebug> #include <QMessageBox> #include <QFileDialog> #include <QColorDialog> #include <QFontDialog> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: QDialog dlg; }; #endif // MAINWINDOW_H
mainwindow.cpp:
#include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { resize(480, 320); setWindowTitle("Hello"); // 新建菜单栏 QMenuBar *mBar = menuBar(); setMenuBar(mBar); // 添加菜单 QMenu *menu = mBar->addMenu("对话框"); // 添加菜单项,添加信号槽弹出 模态对话框 QAction *p1 = menu->addAction("模态对话框"); connect( p1, &QAction::triggered, [=]() { dlg.setWindowTitle("模态对话框"); dlg.exec(); qDebug() << "111"; }); // 添加菜单项,添加信号槽弹出 非模态对话框 QAction *p2 = menu->addAction("非模态对话框"); connect( p2, &QAction::triggered, [=]() { // 可以用全作用域的写法,也可用堆区创建,加上生命范围 //dlg.show(); //qDebug() << "111"; QDialog *p = new QDialog; p->setAttribute(Qt::WA_DeleteOnClose);// 应用控件时自动释放 p->setWindowTitle("非模态对话框"); p->show(); qDebug() << "111"; }); // 添加菜单项,添加信号槽弹出 标准对话框-关于 QAction *p3 = menu->addAction("标准对话框"); connect( p3, &QAction::triggered, [=]() { QMessageBox::about(this, "about", "关于Qt"); QMessageBox::critical(this, "critical", "错误"); QMessageBox::information(this, "info", "信息"); QMessageBox::warning(this, "warning", "警告"); }); // 添加菜单项,添加信号槽弹出 标准对话框-问题对话框 QAction *p4 = menu->addAction("问题对话框"); connect( p4, &QAction::triggered, [=]() { // 未指定枚举时,默认返回 QMessageBox::Yes 或 QMessageBox::No int ret = QMessageBox::question(this, "question", "是否?"); // 指定枚举时,会返回指定枚举,同时对话框的按键文字也会发生变化 //int ret = QMessageBox::question(this, "question", "是否?", // QMessageBox::Ok | QMessageBox::Cancel); switch(ret) { case QMessageBox::Yes: qDebug() << "是"; break; case QMessageBox::No: qDebug() << "否"; break; default: break; } }); // 添加菜单项,添加信号槽弹出 标准对话框-文件对话框 QAction *p5 = menu->addAction("文件对话框"); connect( p5, &QAction::triggered, [=]() { // 用打开的方式打开一个文件对话框 // 打印选中该的路径名称。参数:父对象,对话框标题,默认打开路径,过滤的文件格式 QString path = QFileDialog::getOpenFileName(this, "open", "../", "souce(*.cpp *.h);;Text(*.txt);;all(*.*)"); // 调试输出选择路径 qDebug() << path; }); // 添加菜单项,添加信号槽弹出 标准对话框-颜色对话框 QAction *p6 = menu->addAction("颜色对话框"); connect( p6, &QAction::triggered, [=]() { // 默认用红色打开调色板 QColor color = QColorDialog::getColor(QColor(255,0,0)); // 调试输出RGB信息 qDebug() << color.red() << color.green() << color.blue(); }); // 添加菜单项,添加信号槽弹出 标准对话框-字体对话框 QAction *p7 = menu->addAction("字体对话框"); connect( p7, &QAction::triggered, [=]() { // 默认用16号宋体打开字体对话框 bool flag; QFont font = QFontDialog::getFont(&flag, QFont("宋体",16)); // 调试输出字体、字号、加粗、倾斜 qDebug() << font.family().toUtf8().data() << font.pointSize() << font.bold() << font.italic(); }); } MainWindow::~MainWindow() { }
示例现象:
- 文件对话框:
可以根据文件类型筛选显示文件:
选中文件后,调试栏会输出文件路径:
- 颜色对话框:
选中颜色后,调试栏输出颜色RGB值:
- 字体对话框:
选中后调试栏输出字体格式: