【Qt教程】1.11 - Qt5 标准对话框QMessageBox(关于、错误、信息、警告、问题、颜色、字体、文件对话框)

所谓标准对话框,是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值:

 

  • 字体对话框:

选中后调试栏输出字体格式:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值