4.0 Qt的基本对话框

4.0 Qt的基本对话框
在Qt中有一些可以让程序员直接使用的对话框类,分别有以下这些:
基本文件对话框QFileDialog
基本颜色选择对话框QColorDialog
基本字体选择对话框QFontDialog
基本输入对话框QInputDialog(其中这个里面又有三种对话框[数字输入对话框,字符串输入对话框,双精度数输入对话框])
基本消息对话框QMessageBox(这个类里面有几个静态函数,分别用来描述程序不同警告级别的对话框[critical,warning,information
,question,about,aboutQt]这几种对话框)和自定义的消息对话框(程序员可以自己定义这种消息对话框的按钮和图标等一系列参数)
4.0.1 基本文件对话框(QFileDialog)
注:要使用这个类,必须要包含QFileDialog这个类,这个类里面有这些静态函数可供使用
1.获取用户打开的一个已经存在的文件夹的路径
QString getExistingDirectory(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //标题名称(这个可以自己定义)
const QString &dir = QString(), //默认打开的目录(若指定了就打开这个文件夹的路径)
QFileDialog::Options options = ShowDirsOnly//显示方式(可以只显示文件夹名称,也可以同时显示文件夹的其他信息)
)
2.获取用户打开的一个已经存在的文件夹的URL路径(这个和前面的那个区别就是会多一个url前缀[一般用在网络中])
QUrl getExistingDirectoryUrl(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //标题名称
const QUrl &dir = QUrl(), //默认打开的URL目录
QFileDialog::Options options = ShowDirsOnly,//文件夹的显式方式
const QStringList &supportedSchemes = QStringList()//支持的URL协议(默认是file文件协议,还可以其他的协议)
)
3.获取用户打开的文件的具体内容(注意:这个文件会被读入到程序员所规定的内存中[该内存块用QByteArray描述])
void getOpenFileContent(
const QString &nameFilter,//文件格式过滤器(我可以通过这个参数来强制用户只能选择指定后缀的文件类型)
const std::function<void (const QString &, const QByteArray &)> &fileOpenCompleted//处理文件二进制信息流的函数指针
)
注意:这个函数指针的格式必须是这种格式的函数
void XXXFnctionName(const QString &, const QByteArray &);
4.获取用户打开的文件的名称(包括文件的路径)
QString getOpenFileName(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //标题名称
const QString &dir = QString(), //默认打开的文件的名称
const QString &filter = QString(), //过滤器(用于筛选指定的文件)
QString *selectedFilter = nullptr, //默认被选中的文件的过滤器(指定该参数,当打开文件夹时,只有符号该筛选规则的文件都会被默认选中)
QFileDialog::Options options = Options()//显示文件的显式方式(默认只显示文件名称)
)
5.获取用户选择的多个文件(会读到一个字符串列表中)
QStringList getOpenFileNames(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //标题栏
const QString &dir = QString(), //默认打开的文件的名称
const QString &filter = QString(), //过滤器
QString *selectedFilter = nullptr, //默认被选中的文件的过滤器
QFileDialog::Options options = Options()//显示文件的方式(默认只显示文件名称)
)
6.获取打开文件的URL(这个和前面获取打开文件夹的URL的函数雷同,只不过它能取到文件的具体路径)
QUrl getOpenFileUrl(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //标题栏
const QUrl &dir = QUrl(), //默认打开的文件的URL
const QString &filter = QString(), //过滤器
QString *selectedFilter = nullptr, //默认被选中的文件的过滤器
QFileDialog::Options options = Options(), //打开的选项
const QStringList &supportedSchemes = QStringList()//url的地址
)
7.获取用户选择的文件的多个Url(结果存储在列表中)
QList<QUrl> getOpenFileUrls(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //标题栏
const QUrl &dir = QUrl(), //默认打开的URL目录
const QString &filter = QString(), //文件格式的过滤器
QString *selectedFilter = nullptr, //默认选中符合格式要求的过滤器
QFileDialog::Options options = Options(), //显示文件的方式
const QStringList &supportedSchemes = QStringList()//URL协议
)
8.获取用户保存的文件的信息
QString getSaveFileName(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //保存对话框的标题栏
const QString &dir = QString(), //默认的保存目录
const QString &filter = QString(), //过滤器
QString *selectedFilter = nullptr, //默认符合过滤器规则的文件
QFileDialog::Options options = Options()//选项
)
9.获取保存的文件的URL
QUrl getSaveFileUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options(), const QStringList &supportedSchemes = QStringList())
QFileDialog的使用(见QFileDialogDemo)
1.1 新建一个Qt的控制台应用程序,项目名称修改为QFileDialogDemo
1.2 在QFileDialogDemo.pro文件中加入:
QT += gui
QT += widgets
1.3 在main.cpp中写上以下代码

#include <QCoreApplication>
#include <QApplication>
#include <QDebug>
#include <QFileDialog>
void getFileContent(const QString &fileName, const QByteArray &data)
{
    qDebug() << "fileName:" << fileName;
    for(QByteArray::const_iterator it = data.begin();it!=data.end();it++)
    {
        qDebug() << *it;
    }
}
int main(int argc, char *argv[])
{
    QApplication theApp(argc,argv);
    qDebug() << "---getExistingDirectory---";
    qDebug() << QFileDialog::getExistingDirectory();
    qDebug() << "---getExistingDirectoryUrl---";
    qDebug() << QFileDialog::getExistingDirectoryUrl().toString();
    qDebug() << "---getOpenFileName---";
    qDebug() << QFileDialog::getOpenFileName();
    qDebug() << "---getOpenFileNames---";
    QStringList files = QFileDialog::getOpenFileNames();
    for(QStringList::const_iterator it=files.begin();it!=files.end();it++)
    {
        qDebug() << *it;
    }
    qDebug() << "---getOpenFileUrl---";
    qDebug() << QFileDialog::getOpenFileUrl();
    qDebug() << "---getOpenFileUrls---";
    QList<QUrl>urls(QFileDialog::getOpenFileUrls());
    for(const QUrl& url:urls)
    {
        qDebug() << url;
    }
    qDebug() << "---getSaveFileName---";
    qDebug() << QFileDialog::getSaveFileName();
    qDebug() << "---getSaveFileUrl---";
    qDebug() << QFileDialog::getSaveFileUrl();
    qDebug() << "---getOpenFileContent---";
    QFileDialog::getOpenFileContent(QString("(*.c *.cpp)"),getFileContent);
    return theApp.exec();
}

注:其实在Qt的控制台程序中是可以使用Qt的GUI类的,但是必须要把QCoreApplication改为QApplication
实际上前者只是对一些Qt的核心库有支持,并不支持GUI有关的类;而后者就可以支持

本案例代码:https://files.cnblogs.com/files/blogs/792763/QFileDialogDemo.zip?t=1697976851&download=true

4.0.2 标准颜色对话框(QColorDialog)
常用的静态方法:
//1.打开一个拾色器窗口让用户选择颜色后返回一个QColor对象
QColor getColor(
const QColor &initial = Qt::white
, QWidget *parent = nullptr,
const QString &title = QString(),
QColorDialog::ColorDialogOptions options = ColorDialogOptions()
)
//2.QColor customColor(int index)
通过用户自定义的颜色组的下标返回对应的QColor对象(这个自定义颜色见截图customColor.png)
//3.int customCount()
统计用户一共可以自定义多少个颜色
//4.void setCustomColor(int index, QColor color)
通过下标来设置对应下标的自定义颜色
//5.void setStandardColor(int index, QColor color)
通过下标设置标准颜色
//6.QColor standardColor(int index)
通过下标返回标准颜色的QColor对象
4.0.2.2 案例(见QColorDialogDemo)
在本案例中,我们将创建一个控制台项目(和之前的一样),来使用getColor获取用户选择的颜色并将其绘制到一个QFrame对象上
4.0.2.2.1 创建一个Qt的控制台项目,设置项目名称为QColorDialogDemo
4.0.2.2.2 在QColorDialogDemo.pro文件中修改及加入以下代码:
QT += gui
QT +=core
QT += widgets
4.0.2.2.3 在main.cpp中写进以下代码

#include<QApplication>
#include<QDebug>
#include<QFrame>
#include<QColorDialog>
int main(int argc, char *argv[])
{
    QApplication theApp(argc, argv);
    qDebug() << "Total have " << QColorDialog::customCount() << " Kinds of Custom Color";
    QColor chooseColor = QColorDialog::getColor();//获取颜色
    QFrame showColorFrame;//显示颜色的Frame对象
    showColorFrame.setAutoFillBackground(true);//设置自动填充整个Frame窗口
    showColorFrame.setPalette(QPalette(chooseColor));//设置调色板
    showColorFrame.show();//显示Frame对象
    return theApp.exec();
}

结果自行运行即可
本案例代码:https://files.cnblogs.com/files/blogs/792763/QColorDialogDemo.rar?t=1698285015&download=true

4.0 Qt的基本对话框
在Qt中有一些可以让程序员直接使用的对话框类,分别有以下这些:
基本文件对话框QFileDialog
基本颜色选择对话框QColorDialog
基本字体选择对话框QFontDialog
基本输入对话框QInputDialog(其中这个里面又有三种对话框[数字输入对话框,字符串输入对话框,双精度数输入对话框])
基本消息对话框QMessageBox(这个类里面有几个静态函数,分别用来描述程序不同警告级别的对话框[critical,warning,information
,question,about,aboutQt]这几种对话框)和自定义的消息对话框(程序员可以自己定义这种消息对话框的按钮和图标等一系列参数)
4.0.1 基本文件对话框(QFileDialog)
注:要使用这个类,必须要包含QFileDialog这个类,这个类里面有这些静态函数可供使用
1.获取用户打开的一个已经存在的文件夹的路径
QString getExistingDirectory(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //标题名称(这个可以自己定义)
const QString &dir = QString(), //默认打开的目录(若指定了就打开这个文件夹的路径)
QFileDialog::Options options = ShowDirsOnly//显示方式(可以只显示文件夹名称,也可以同时显示文件夹的其他信息)
)
2.获取用户打开的一个已经存在的文件夹的URL路径(这个和前面的那个区别就是会多一个url前缀[一般用在网络中])
QUrl getExistingDirectoryUrl(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //标题名称
const QUrl &dir = QUrl(), //默认打开的URL目录
QFileDialog::Options options = ShowDirsOnly,//文件夹的显式方式
const QStringList &supportedSchemes = QStringList()//支持的URL协议(默认是file文件协议,还可以其他的协议)
)
3.获取用户打开的文件的具体内容(注意:这个文件会被读入到程序员所规定的内存中[该内存块用QByteArray描述])
void getOpenFileContent(
const QString &nameFilter,//文件格式过滤器(我可以通过这个参数来强制用户只能选择指定后缀的文件类型)
const std::function<void (const QString &, const QByteArray &)> &fileOpenCompleted//处理文件二进制信息流的函数指针
)
注意:这个函数指针的格式必须是这种格式的函数
void XXXFnctionName(const QString &, const QByteArray &);
4.获取用户打开的文件的名称(包括文件的路径)
QString getOpenFileName(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //标题名称
const QString &dir = QString(), //默认打开的文件的名称
const QString &filter = QString(), //过滤器(用于筛选指定的文件)
QString *selectedFilter = nullptr, //默认被选中的文件的过滤器(指定该参数,当打开文件夹时,只有符号该筛选规则的文件都会被默认选中)
QFileDialog::Options options = Options()//显示文件的显式方式(默认只显示文件名称)
)
5.获取用户选择的多个文件(会读到一个字符串列表中)
QStringList getOpenFileNames(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //标题栏
const QString &dir = QString(), //默认打开的文件的名称
const QString &filter = QString(), //过滤器
QString *selectedFilter = nullptr, //默认被选中的文件的过滤器
QFileDialog::Options options = Options()//显示文件的方式(默认只显示文件名称)
)
6.获取打开文件的URL(这个和前面获取打开文件夹的URL的函数雷同,只不过它能取到文件的具体路径)
QUrl getOpenFileUrl(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //标题栏
const QUrl &dir = QUrl(), //默认打开的文件的URL
const QString &filter = QString(), //过滤器
QString *selectedFilter = nullptr, //默认被选中的文件的过滤器
QFileDialog::Options options = Options(), //打开的选项
const QStringList &supportedSchemes = QStringList()//url的地址
)
7.获取用户选择的文件的多个Url(结果存储在列表中)
QList<QUrl> getOpenFileUrls(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //标题栏
const QUrl &dir = QUrl(), //默认打开的URL目录
const QString &filter = QString(), //文件格式的过滤器
QString *selectedFilter = nullptr, //默认选中符合格式要求的过滤器
QFileDialog::Options options = Options(), //显示文件的方式
const QStringList &supportedSchemes = QStringList()//URL协议
)
8.获取用户保存的文件的信息
QString getSaveFileName(
QWidget *parent = nullptr, //父窗口指针
const QString &caption = QString(), //保存对话框的标题栏
const QString &dir = QString(), //默认的保存目录
const QString &filter = QString(), //过滤器
QString *selectedFilter = nullptr, //默认符合过滤器规则的文件
QFileDialog::Options options = Options()//选项
)
9.获取保存的文件的URL
QUrl getSaveFileUrl(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options(), const QStringList &supportedSchemes = QStringList())
QFileDialog的使用(见QFileDialogDemo)
1.1 新建一个Qt的控制台应用程序,项目名称修改为QFileDialogDemo
1.2 在QFileDialogDemo.pro文件中加入:
QT += gui
QT += widgets
1.3 在main.cpp中写上以下代码
////
注:其实在Qt的控制台程序中是可以使用Qt的GUI类的,但是必须要把QCoreApplication改为QApplication
实际上前者只是对一些Qt的核心库有支持,并不支持GUI有关的类;而后者就可以支持

----------------------------------------------------------------------------------------------------------------
4.0.2 标准颜色对话框(QColorDialog)
常用的静态方法:
//1.打开一个拾色器窗口让用户选择颜色后返回一个QColor对象
QColor getColor(
const QColor &initial = Qt::white
, QWidget *parent = nullptr,
const QString &title = QString(),
QColorDialog::ColorDialogOptions options = ColorDialogOptions()
)
//2.QColor customColor(int index)
通过用户自定义的颜色组的下标返回对应的QColor对象(这个自定义颜色见截图customColor.png)
//3.int customCount()
统计用户一共可以自定义多少个颜色
//4.void setCustomColor(int index, QColor color)
通过下标来设置对应下标的自定义颜色
//5.void setStandardColor(int index, QColor color)
通过下标设置标准颜色
//6.QColor standardColor(int index)
通过下标返回标准颜色的QColor对象
4.0.2.2 案例(见QColorDialogDemo)
在本案例中,我们将创建一个控制台项目(和之前的一样),来使用getColor获取用户选择的颜色并将其绘制到一个QFrame对象上
4.0.2.2.1 创建一个Qt的控制台项目,设置项目名称为QColorDialogDemo
4.0.2.2.2 在QColorDialogDemo.pro文件中修改及加入以下代码:
QT += gui
QT +=core
QT += widgets
4.0.2.2.3 在main.cpp中写进以下代码

#include<QApplication>
#include<QDebug>
#include<QFrame>
#include<QColorDialog>
int main(int argc, char *argv[])
{
    QApplication theApp(argc, argv);
    qDebug() << "Total have " << QColorDialog::customCount() << " Kinds of Custom Color";
    QColor chooseColor = QColorDialog::getColor();//获取颜色
    QFrame showColorFrame;//显示颜色的Frame对象
    showColorFrame.setAutoFillBackground(true);//设置自动填充整个Frame窗口
    showColorFrame.setPalette(QPalette(chooseColor));//设置调色板
    showColorFrame.show();//显示Frame对象
    return theApp.exec();
}

结果自行运行即可
本案例代码:https://files.cnblogs.com/files/blogs/792763/QColorDialogDemo.rar?t=1698285015&download=true
4.0.3 标准字体对话框(QFontDialog)
QFontDialog是字体对话框类,这个类也有两种静态函数可让程序员使用来随时选择不同的字体
4.0.3.1 QFontDialog的常用静态函数
QFont getFont(
bool *ok, //字体是否设置成功
const QFont &initial, //如果用户在打开的字体选择对话框点击了OK按钮,那么该参数相当于没用,如果
//点击了Cancel,那么该参数就是程序员设置的默认值,并且返回的字体也是该值
QWidget *parent = nullptr, //父窗口指针
const QString &title = QString(), //字体对话框的标题栏
QFontDialog::FontDialogOptions options = FontDialogOptions()
)
QFont getFont(bool *ok, QWidget *parent = nullptr)
4.0.3.2 QFontDialog的使用
4.0.3.2.1 新建一个Qt的控制台应用程序,项目名称命名为QFontDialogDemo,在QFontDialogDemo.pro文件中加入以下代码
QT += gui
QT += widgets
QT += core
4.0.3.2.2 在main.cpp中加入以下代码

#include <QApplication>
#include <QDebug>
#include <QFontDialog>
#include <QTextStream>
#include <QLabel>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    bool ok(false);
    QFont font = QFontDialog::getFont(&ok,nullptr);//获取字体
    qDebug() << ok;//字体是否被重新设置成功
    qDebug() << font.family();//字体族
    qDebug() << font.families();//字体族的具体的字体
    qDebug() << font.toString();//字体的属性
    QLabel label;
    label.setFont(font);//在这个label上设置字体
    label.setText(QString("Hello,World!"));//设置文本
    label.show();//显示字体
    return a.exec();
}

  本案例项目文件:https://files.cnblogs.com/files/blogs/792763/QFontDemo.zip?t=1698317444&download=true

4.0.4 标准输入对话框(QInputDialog)
标准输入对话框也是常用的一种对话框窗口,这种对话框几乎都被用在一些需要临时输入数据的一些场景中
4.0.4.1 QInputDialog的一些常用的静态方法
4.0.4.1.1 获取小数的对话框(该对话框是通过SpinBox或直接输入数字来获取输入的)
double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
double getDouble(QWidget *parent, const QString &title, const QString &label, double value, double min, double max, int decimals, bool *ok, Qt::WindowFlags flags, double step)
4.0.4.1.2 获取整数的对话框(注:该对话框是通过SpinBox来获取设置要输入的数字的)
int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
4.0.4.1.3 获取列表项对话框(使用ComboBox来让用户选择,它返回的是列表某一项的字符串形式的描述)
QString getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
4.0.4.1.4 文本编辑对话框
QString getMultiLineText(QWidget *parent, const QString &title, const QString &label, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
4.0.4.1.5 字符串输入对话框
QString getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
4.0.4.2 QInputDialog的使用
4.0.4.2.1 新建一个Qt的控制台应用程序,项目名称命名为QInputDialogDemo
4.0.4.2.2 在QInputDialogDemo.pro中加入或修改以下代码
QT += GUI
QT += widgets
QT += core
4.0.4.2.3 在main.cpp中写上以下代码

#include <QApplication>
#include <QDebug>
#include <QInputDialog>
int main(int argc, char *argv[])
{
    QApplication theApp(argc, argv);
    bool ok(false);
    int value = QInputDialog::getInt(nullptr,QString("整数输入对话框"),QString("请选择或输入一个整数"),555,500,1000,10,&ok);
    qDebug() << "ok=" << ok << ",value:" << value;
    QString string = QInputDialog::getText(nullptr,QString("字符串输入对话框"),QString("输入密码字符串"),QLineEdit::EchoMode::Password);
    qDebug() << "string=" << string;
    double var = QInputDialog::getDouble(nullptr,QString("小数输入对话框"),QString("请输入小数"),0.00,1.00,10.00,3,&ok);
    qDebug() << "ok=" << ok << ",var:" << var;
    QStringList strList;
    strList << "A.Item_A" << "B.Item_B" << "C.Item_C" << "D.Item_D" << "E.Item_E";
    QString item = QInputDialog::getItem(nullptr,QString("列表选项选择对话框"),QString("请选择选项"),strList,1,false,&ok);
    qDebug() << "ok=" << ok << ",item=" << item;
    QString text = QInputDialog::getMultiLineText(nullptr,QString("文本编辑对话框"),QString("Text"));
    qDebug() << "text=" << text;
    return theApp.exec();
}

4.0.5 标准消息对话框
在Qt中有一些标准的消息对话框,这些对话框被用来向用户显示不同的警告级别的对话框,具体有:
QMessageBox::question;QMessageBox::warning();QMessageBox::critical;QMessageBox::information;QMessageBox::about;
QMessageBox::aboutQt以及自定义的消息对话框
4.0.5.1 QMessageBox::question()对话框
该对话框用于向用户进行一个简单的询问
4.0.5.2 QMessageBox::warning()对话框
该对话框用于向用户警告一些信息
4.0.5.3 QMessageBox::critical()对话框
该对话框用于提示用户出现了严重的错误
4.0.5.4 QMessageBox::information()对话框
该对话框用于提示用户一些信息
4.0.5.5 QMessageBox::about()对话框
该对话框作用是显示"关于"信息
4.0.5.6 QMessageBox::aboutQt()对话框
该对话框的作用是显示"关于Qt"对话框
4.0.5.7 自定义消息对话框
该对话框可以由程序员自己定义对话框的按钮,图标,文字和标题栏
案例:
Qt的一些对话框(见QMessageBoxDemo)
1.创建一个Qt的控制台项目,项目名称修改为QMessageBoxDemo
2 在QMessageBoxDemo.pro中加入或修改以下代码
QT += GUI
QT += widgets
QT += core
3 在main.cpp中写上以下代码

#include <QApplication>
#include <QMessageBox>
#include <QDebug>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //对于information对话框,无论用户点击Ok按钮还是点击叉叉,都是返回标准按钮中的Ok枚举
    switch(QMessageBox::information(nullptr,QString("Information"),QString("Information MessageBox")))
    {
    case QMessageBox::StandardButton::Ok:
        qDebug() << "Information MessageBox,User Clicked Ok";
        break;
    }
    //对于question对话框,用户可点击叉叉或Yes按钮或No按钮(点击No按钮和点击叉叉返回的都是No枚举)
    switch(QMessageBox::question(nullptr,QString("Question"),QString("Question MessageBox")))
    {
    case QMessageBox::StandardButton::Yes:
        qDebug() << "Question MessageBox,User Clicked Yes";
        break;
    case QMessageBox::StandardButton::No:
        qDebug() << "Question MessageBox,User Clicked No";
        break;
    }
    //对于warning对话框,用户只能点击Ok按钮或叉叉(都是返回Ok枚举)
    switch(QMessageBox::warning(nullptr,QString("Warning"),QString("Warning MessageBox")))
    {
    case QMessageBox::StandardButton::Ok:
        qDebug() << "Warning MessageBox,User Clicked Ok";
        break;
    }
    //对于Critical对话框,用户只能点击Ok按钮或叉叉(都是返回Ok枚举)
    switch(QMessageBox::critical(nullptr,QString("Critical"),QString("Critical MessageBox")))
    {
    case QMessageBox::StandardButton::Ok:
        qDebug() << "Critical MessageBox,User Clicked Ok";
        break;
    }
    //显示about对话框
    QMessageBox::about(nullptr,QString("about"),QString("about MessageBox"));
    //显示aboutQt对话框
    QMessageBox::aboutQt(nullptr);
    //自定义对话框
    //自定义对话框,实际上就是通过定义一个QMessageBox的对象,在这个对象上面设置一些属性
    QMessageBox userMsgBox;//定义一个QMessageBox对象
    QPushButton*yesBtn = userMsgBox.addButton(QString("Yes"),QMessageBox::ActionRole);//添加一个Yes的Button
    QPushButton*noBtn = userMsgBox.addButton(QString("No"),QMessageBox::ActionRole);//添加一个No的Button
    userMsgBox.setWindowTitle(QString("User Define MessageBox"));//设置MessageBox标题栏
    userMsgBox.setText(QString("用户自定义消息框"));//设置消息框内容
    userMsgBox.setIconPixmap(QPixmap(QApplication::applicationDirPath()+"/head.jpg"));//设置消息框显示图片
    userMsgBox.exec();//运行消息框(此时会开始消息框的消息循环)
    //判断用户点击了哪个按钮
    if((QAbstractButton*)yesBtn == userMsgBox.clickedButton())
    {
        qDebug() << "Custom MessageBox Clicked yesBtn";
    }
    else if((QAbstractButton*)noBtn == userMsgBox.clickedButton())
    {
        qDebug() << "Custom MessageBox Clicked noBtn";
    }
    return a.exec();
}

  

posted @ 2023-10-22 20:17  蜡笔小新Pointer  阅读(48)  评论(0)    收藏  举报