QT各种标准对话框实例使用总结

作者:水瓶星人
座右铭:记录每一分痛点,分享每一点收获
说明:这篇来自书籍上的例程,即是笔记,也是分享。现在我也只是初学QT,文章若有错误还望指正,它能够对你有所帮助

文章目录


运行示意图

image-20210325224646899

image-20210325225135748

总体感受:就是调用,调用,调用。标准对话框嘛,自然是人家写好了的,直接调用就好了,关键是要知道调用哪个,怎么使用。

而遇到需要打开另一个多分类的就新建一个类窗口(继承QDialog以能打印窗口),添加一些按钮将那些标准窗口和其按钮相互关联起来,在将其类对象和主窗口中的按钮关联起来。比如:标准消息对话框和标准输入对话框。

先创建一个项目,并将其标题设置为:各种标准对话框的实例

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
	this->setWindowTitle("各种标准对话框的实例"); //设置工程对话框标题——主窗体
}

这样运行的话将是一个空白窗体,窗体名称为:各种标准对话框的实例

如图:

image-20210325231720200

接着就需要一个个往上添加按钮并关联相应事件(调用其相应类)。

下面就介绍一下这些标准对话框要调用哪些类,如何使用

一、文件标准对话框

实现内容:

文件标准对话框点击后选择一个文件(文件后缀自己限定),将其文件的路径打印出来

调用的函数名:QFileDialog::getOpenFileName

函数介绍:

image-20210325233047841

翻译:这是一个便利的静态函数,它返回用户选择的现有文件。 如果用户按“取消”,它将返回一个空字符串。

参数介绍:

QWidget *parent = nullptr :父窗口

const QString &caption = QString() :

const QString &dir = QString(),

const QString &filter = QString(),

QString *selectedFilter = nullptr,

QFileDialog::Options options = Options()

代码实现:

    //================文件标准对话框==================//
    fileBtn=new QPushButton;    //各个控件对象的初始化
    fileBtn->setText(tr("文件标准对话框实例"));
    fileLineEdit=new QLineEdit; //用来显示选择的文件名

    //添加布局管理
    mainLayout=new QGridLayout(this);   //布局设计
    mainLayout->addWidget(fileBtn,0,0);
    mainLayout->addWidget(fileLineEdit,0,1);

    //添加事件关联
    connect(fileBtn,&QPushButton::clicked,this,&Dialog::showFile);

//槽函数showFile()实现
void Dialog::showFile()
{
    //返回需要打开的文件的绝对路径,取消返回空字符
    //QString s = QFileDialog::getOpenFileName(this,"open file dialog","/default","C++ file(*.cpp);;C files(*.c);;Head files(*.h)");
    //使用这个可以同时筛选出满足条件的而不是一个每个条件单独筛选
    QString s = QFileDialog::getOpenFileName(this,"open file dialog","/default","Projects(*.c *.cpp *.h)");
    fileLineEdit->setText(s);
}

运行截图:

image-20210325234223889

image-20210327111051119

二、颜色标准对话框

实现内容:

弹出对话框后选择一个颜色打印在一个框架窗体小部件上

调用的函数名:QColorDialog::getColor

函数介绍:

image-20210327111609216

翻译:弹出带有给定窗口标题的模态颜色对话框(如果未指定,则为“选择颜色”),让用户选择一种颜色,然后返回该颜色。 颜色最初设置为初始。 该对话框是父级的子级。 如果用户取消对话框,它将返回无效的颜色(请参阅QColor :: isValid())。
options参数允许您自定义对话框。

参数:

const QColor &initial = Qt::white :初始时选中的颜色

QWidget *parent = nullptr :父窗体

const QString &title = QString() :颜色选择框的标题

QColorDialog::ColorDialogOptions options = ColorDialogOptions() :自定义对话框选择

options 参考下:

image-20210327112311071

代码实现:

    //================标准颜色对话框==================//
    colorBtn = new QPushButton;     //创建各个控件实例
    colorBtn->setText(tr("颜色标准对话框实例"));
    colorFram = new QFrame;
    colorFram->setFrameShape(QFrame::Box);  //HLine 线 Panel 方框同Box
    colorFram->setAutoFillBackground(true);

    //添加布局管理
    mainLayout->addWidget(colorBtn,1,0);
    mainLayout->addWidget(colorFram,1,1);

    //添加事件关联
    connect(colorBtn,&QPushButton::clicked,this,&Dialog::showColor);

//showColor()实现
void Dialog::showColor()
{
    QColor c = QColorDialog::getColor(Qt::blue,this,"选颜色");
    if(c.isValid())
    {
        colorFram->setPalette(QPalette(c));
    }
}

运行截图:

image-20210326110037352

image-20210327110959389

三、字体标准对话框

实现内容:

调用字体设置窗口,设置字体样式

调用的函数名:QFontDialog::getFont

函数介绍:

image-20210327113554416

翻译:执行模式字体对话框并返回字体。
如果用户单击“确定”,则返回所选字体。 如果用户单击“取消”,则返回初始字体。
该对话框是使用给定的父级和options中指定的选项构造的。 标题显示为对话框的窗口标题,而initial是最初选择的字体。 如果ok参数不为null,则在用户单击“确定”时将其引用的值设置为true,在用户单击“取消”时将其引用的值设置为false。

参数:

bool *ok :返回用户的选择(ok返回true,cancel返回false)

const QFont &initial :初始字体

QWidget *parent = nullptr :父窗体

const QString &title = QString() :字体选择框的标题

QFontDialog::FontDialogOptions options = FontDialogOptions()

options 参考下:

翻译:该枚举指定了影响字体对话框外观的各种选项。
例如,它允许指定应显示哪种字体。 如果未指定,将列出所有可用字体。
请注意,某些平台(例如Mac)可能不支持字体过滤选项。 非本机对话框(在Windows或Linux上使用)始终支持它们。

image-20210327114323011

代码实现:

    //================标准字体对话框==================//
    fontBtn = new QPushButton;
    fontBtn->setText(tr("字体标准对话框实例"));
    fontLineEdit = new QLineEdit;
    fontLineEdit->setText(tr("Welcome!"));

    //添加布局管理
    mainLayout->addWidget(fontBtn,2,0);
    mainLayout->addWidget(fontLineEdit,2,1);

    //添加事件关联
    connect(fontBtn,&QPushButton::clicked,this,&Dialog::showFont);

//showFont()实现
void Dialog::showFont()
{
    bool ok;
    QFont f = QFontDialog::getFont(&ok);    //注意到ok传的是引用,如果选择了ok 则ok为true 如果选择了cancel 则ok为false
    if(ok)
    {
        fontLineEdit->setFont(f);
    }
}

运行截图:

image-20210327112441428

image-20210327112540292

四、标准输入对话框

前情说明

此处涉及对话框较多,所以选择新建一个窗体,将触发对话框的按钮都布局在新窗体

主要思路就是:定义标签——定义按钮——定义槽函数——按钮和槽函数关联——槽函数调用标准对话框

实现内容:

对不同类型的数据进行输入,打印在旁边小部件上

调用的函数名:

QInputDialog::getText

QInputDialog::getItem

QInputDialog::getInt

QInputDialog::getDouble

image-20210327140118156

两个窗口关联

    //================标准输入对话框==================//
    inputBtn = new QPushButton;
    inputBtn->setText(tr("标准输入对话框实例"));

    //添加布局管理
    mainLayout->addWidget(inputBtn,3,0);

    //添加事件关联	
    connect(inputBtn,&QPushButton::clicked,this,&Dialog::showInputDlg);

//showInputDlg()实现 按下按钮就会创建一个类对象,并调用其show函数显示窗体
void Dialog::showInputDlg()
{
    inputDlg = new InputDlg(this);
    inputDlg->show();
}
    
总体运行截图:

image-20210327115311351

单个函数介绍

1、QInputDialog::getText

(1)函数介绍:

image-20210327133255857

翻译:静态便利函数,用于从用户那里获取字符串。
title是显示在对话框标题栏中的文本。 标签是显示给用户的文本(应该说应该输入什么)。 文本是放置在行编辑中的默认文本。 模式是线路编辑将使用的回显模式。 inputMethodHints是输入方法提示,如果输入方法处于活动状态,它将在编辑小部件中使用。
如果ok为非空值,则* ok将被设置为true(如果用户按下OK),而false将被设置为false(如果用户按下Cancel)。 对话框的父级是父级。 该对话框将是模式对话框,并使用指定的窗口小部件标志。
如果对话框被接受,则此函数返回对话框行编辑中的文本。 如果对话框被拒绝,则返回一个空QString。

参数:

QWidget *parent :父窗体

const QString &title :窗口标题

const QString &label :输入提示标签

QLineEdit::EchoMode mode = QLineEdit::Normal :使用的回显模式

const QString &text = QString() :默认显示文本

bool *ok = nullptr :接收用户的选择(ok返回true,cancel返回false)

Qt::WindowFlags flags = Qt::WindowFlags()

Qt::InputMethodHints inputMethodHints = Qt::ImhNone :输入方法提示

(2)使用举例:
    //姓名
    nameLabel1 = new QLabel;
    nameLabel1->setText(tr("姓名:"));
    nameLabel2 = new QLabel;
    nameLabel2->setText(tr("张三"));    //姓名初始值
    nameLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);    //设置标签样式
    nameBtn = new QPushButton;
    nameBtn->setText(tr("修改名字"));

/*
nameLabel2->text()  : 返回text属性
*/
void InputDlg::ChangeName()
{
    bool ok;
    QString text = QInputDialog::getText(this,tr("标准字符串输入对话框"),tr("请输入姓名"),QLineEdit::Normal,nameLabel2->text(),&ok);
    if(ok && !text.isEmpty())
    {
        nameLabel2->setText(text);
    }
}
(3)运行截图:

image-20210327171642120

2、QInputDialog::getItem

(1)函数介绍:

image-20210327135906774

翻译:静态便利功能,使用户可以从字符串列表中选择一个项目。
title是显示在对话框标题栏中的文本。 标签是显示给用户的文本(应该说应该输入什么)。 items是插入到组合框中的字符串列表。 current是应该作为当前项目的项目的编号。 inputMethodHints是在组合框可编辑且输入法处于活动状态时将使用的输入法提示。
如果editable为true,则用户可以输入自己的文本。 否则,用户只能选择现有项目之一。
如果ok为非null *如果用户按“确定”,则ok设置为true;如果用户按“取消”,则ok设置为false。 对话框的父级是父级。 该对话框将是模式对话框,并使用小部件标志。
此函数返回当前项目的文本,或者,如果editable为true,则返回组合框的当前文本。

参数:

QWidget *parent :父窗体

const QString &title :窗口标题

const QString &label :输入提示标签

const QStringList &items :插入到组合框中的字符串列表

int current = 0 :默认选中的是列表中的哪一项(0:第一项)

bool editable = true :字符串列表项是否可编辑 false:不可编辑

bool *ok = nullptr :接收用户的选择(ok返回true,cancel返回false)

Qt::WindowFlags flags = Qt::WindowFlags() :为窗口小部件指定各种窗口系统属性,不常用

Qt::InputMethodHints inputMethodHints = Qt::ImhNone

flags 参考下:

image-20210327165245147

(2)使用举例:
    //性别
    sexLabel1 = new QLabel;
    sexLabel1->setText(tr("性别:"));
    sexLabel2 = new QLabel;
    sexLabel2->setText(tr("男"));    //性别的初始值
    sexLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);     //设置标签样式
    sexBtn = new QPushButton;
    sexBtn->setText(tr("修改性别"));

void InputDlg::ChangeSex()
{
    QStringList SexItems;
    SexItems << tr("男") << tr("女"); //准备插入到组合框中的字符串列表
    bool ok;
    //SexItems:下拉列表选项
    //0:默认显示第一个选项
    //false:显示的选项不可编辑
    //ok:是否点击确认,点击确认(ok)则为true 取消(cancel)ok则赋值false
    QString SexItem = QInputDialog::getItem(this,tr("标准条目选择对话框"),
                      tr("请选择性别:"),SexItems,0,false,&ok);
    if(ok && !SexItem.isEmpty())
    {
        sexLabel2->setText(SexItem);
    }
}
(3)运行截图:

image-20210327172129939

3、QInputDialog::getInt

(1)函数介绍

image-20210327165931457

翻译:静态便利函数,用于从用户那里获取整数输入。
title是显示在对话框标题栏中的文本。 标签是显示给用户的文本(应该说应该输入什么)。 value是Spinbox设置为的默认整数。 最小值和最大值是用户可以选择的最小值和最大值。 步长是用户按下箭头按钮以增加或减少值时更改值的量。
如果ok为非null *如果用户按“确定”,则ok设置为true;如果用户按“取消”,则ok设置为false。 对话框的父级是父级。 该对话框将是模式对话框,并使用小部件标志。
成功时,此函数返回用户输入的整数; 失败时,它将返回初始值。

参数:

QWidget *parent :父窗体

const QString &title :窗口标题

const QString &label :输入提示标签

int value = 0 :默认显示的值

int min = -2147483647 :可选择的最小值

int max = 2147483647 :可选择的最大值

int step = 1 :步长

bool *ok = nullptr :接收用户的选择(ok返回true,cancel返回false)

Qt::WindowFlags flags = Qt::WindowFlags() :为窗口小部件指定各种窗口系统属性,不常用

(2)使用举例:
    //年龄
    ageLabel1 = new QLabel;
    ageLabel1->setText(tr("年龄:"));
    ageLabel2 = new QLabel;
    ageLabel2->setText(tr("25"));    //年龄的初始值
    ageLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);     //设置标签样式
    ageBtn = new QPushButton;
    ageBtn->setText(tr("修改年龄"));

void InputDlg::ChangeAge()
{
    bool ok;
    int age = QInputDialog::getInt(this,tr("标准int类型输入对话框"),tr("请输入年龄"),ageLabel2->text().toInt(&ok),
                                   0,150,1,&ok);
    if(ok)
    {
        ageLabel2->setText(QString(tr("%1")).arg(age));
    }
}
(3)运行截图:

image-20210327172426773

4、QInputDialog::getDouble

(1)函数介绍:

image-20210327173817548

翻译:静态方便的功能,从用户那里获取一个浮点数。
title是显示在对话框标题栏中的文本。 标签是显示给用户的文本(应该说应该输入什么)。 值是默认的浮点数做了行编辑将被设置为。 最小值和最大值是用户可以选择的最小值和最大值。 小数的小数位数可能的最大数量。
如果ok为非空值,则* ok将在用户按OK时设置为true,在用户按Cancel时为false。 对话框的父级是父级。 该对话框将是模式对话框,并使用小部件标志。
这个函数返回一个已进入用户的浮点数。

参数:类似getInt

(2)使用举例:
    //成绩
    scoreLabel1 = new QLabel;
    scoreLabel1->setText(tr("成绩:"));
    scoreLabel2 = new QLabel;
    scoreLabel2->setText(tr("80"));    //成绩的初始值
    scoreLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);     //设置标签样式
    scoreBtn = new QPushButton;
    scoreBtn->setText(tr("修改成绩"));

void InputDlg::ChangeScore()
{
    bool ok;
    double score = QInputDialog::getDouble(this,tr("标准double类型输入对话框"),tr("请输入成绩:"),
                                           scoreLabel2->text().toDouble(&ok),0,100,1,&ok);
    if(ok)
    {
        scoreLabel2->setText(QString(tr("%1")).arg(score));
    }
}
(3)运行截图:

image-20210327174221719

五、标准消息对话框

前情说明

消息对话框和输入对话框一样,都分好多种,所以也新建一个窗体,将触发对话框的按钮都布局在新窗体上

实现内容:

测试各种消息对话框:Information、warning 、critical、about、aboutQt

调用的函数名:

QMessageBox::question
QMessageBox::information
QMessageBox::warning
QMessageBox::critical
QMessageBox::about
QMessageBox::aboutQt

两个窗口关联

 //================消息对话框==================//
    msgBtn = new QPushButton;
    msgBtn->setText(tr("标准消息对话框实例"));

    //添加到布局管理
    mainLayout->addWidget(msgBtn,3,1);

    //添加事件关联
    connect(msgBtn,&QPushButton::clicked,this,&Dialog::showMsgDlg);

//showMsgDlg()实现
void Dialog::showMsgDlg()
{
    msgDlg = new MsgBoxDlg(this);
    msgDlg->show();
}

总运行截图:

image-20210327225611794

单个函数介绍

1、QMessageBox::question

(1)函数介绍:

image-20210327233443056

翻译:打开一个问题消息框,在给定的父窗口小部件前面带有给定的标题和文本。
标准按钮将添加到消息框中。 defaultButton指定按下Enter键时使用的按钮。 defaultButton必须引用按钮中给定的按钮。 如果defaultButton为QMessageBox :: NoButton,则QMessageBox会自动选择一个合适的默认值。
返回被单击的标准按钮的标识。 如果改为按Esc键,则返回转义按钮。
该消息框是一个应用程序模式对话框。
警告:在执行对话框期间,请勿删除父项。 如果要执行此操作,则应使用QMessageBox构造函数之一自己创建对话框。
此功能在Qt 4.2中引入。

参数:

QWidget *parent :父窗体

const QString &title :窗口标题

const QString &text :提示文本

QMessageBox::StandardButtons buttons = StandardButtons(Yes | No) :标准按钮,添加多个按钮使用 | 分隔

QMessageBox::StandardButton defaultButton = NoButton :默认选中的按钮

标准按钮参考下:

ConstantValueDescription
QMessageBox::Ok0x00000400An “OK” button defined with the AcceptRole.
QMessageBox::Open0x00002000An “Open” button defined with the AcceptRole.
QMessageBox::Save0x00000800A “Save” button defined with the AcceptRole.
QMessageBox::Cancel0x00400000A “Cancel” button defined with the RejectRole.
QMessageBox::Close0x00200000A “Close” button defined with the RejectRole.
QMessageBox::Discard0x00800000A “Discard” or “Don’t Save” button, depending on the platform, defined with the DestructiveRole.
QMessageBox::Apply0x02000000An “Apply” button defined with the ApplyRole.
QMessageBox::Reset0x04000000A “Reset” button defined with the ResetRole.
QMessageBox::RestoreDefaults0x08000000A “Restore Defaults” button defined with the ResetRole.
QMessageBox::Help0x01000000A “Help” button defined with the HelpRole.
QMessageBox::SaveAll0x00001000A “Save All” button defined with the AcceptRole.
QMessageBox::Yes0x00004000A “Yes” button defined with the YesRole.
QMessageBox::YesToAll0x00008000A “Yes to All” button defined with the YesRole.
QMessageBox::No0x00010000A “No” button defined with the NoRole.
QMessageBox::NoToAll0x00020000A “No to All” button defined with the NoRole.
QMessageBox::Abort0x00040000An “Abort” button defined with the RejectRole.
QMessageBox::Retry0x00080000A “Retry” button defined with the AcceptRole.
QMessageBox::Ignore0x00100000An “Ignore” button defined with the AcceptRole.
QMessageBox::NoButton0x00000000An invalid button.
(2)使用举例:
	this->setWindowTitle(tr("标准消息对话框实例"));    //设置对话框的标题
    //按钮初始化
    label = new QLabel;
    label->setText(tr("请选择一种消息框"));
    questionBtn = new QPushButton;
    questionBtn->setText(tr("QustionMsg"));

void MsgBoxDlg::showQuestionMsg()
{
    label->setText(tr("Questioon Message Box"));
    switch(QMessageBox::question(this,tr("Question消息框"),tr("您现在已经修改完成,是否要结束程序"), QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok))
    {
        case QMessageBox::Ok:
            label->setText("Question button/OK");
        break;
        case QMessageBox::Cancel:
            label->setText("Question buton/Cancel");
        default:
            break;
    }
}
(3)运行截图:

image-20210327235007269

2、QMessageBox::information

(1)函数介绍:

image-20210328000411586

翻译:打开一个信息消息框,该消息框在指定的父窗口小部件之前带有给定的标题和文本。
标准按钮将添加到消息框中。 defaultButton指定按下Enter键时使用的按钮。 defaultButton必须引用按钮中给定的按钮。 如果defaultButton为QMessageBox :: NoButton,则QMessageBox会自动选择一个合适的默认值。
返回被单击的标准按钮的标识。 如果改为按Esc键,则返回转义按钮。
该消息框是一个应用程序模式对话框。
警告:在执行对话框期间,请勿删除父项。 如果要执行此操作,则应使用QMessageBox构造函数之一自己创建对话框。
此功能在Qt 4.2中引入。

参数:

QWidget *parent :父窗体

const QString &title :窗口标题

const QString &text :提示文本

QMessageBox::StandardButtons buttons = Ok :要添加的标准按钮(其实也可添加多个,使用 |分隔开)

QMessageBox::StandardButton defaultButton = NoButton :默认选中按钮

(2)使用举例:
	informationBtn = new QPushButton;
    informationBtn->setText(tr("InformationMsg"));

void MsgBoxDlg::showInformationMsg()
{
    label->setText(tr("Information Message Box"));
    QMessageBox::information(this,tr("Information消息框"),
                             tr("这是Information消息框测试,欢迎您!"));	//选择添加,QMessageBox::Ok|QMessageBox::Cancel
    return;
}
(3)运行截图:

image-20210328000846961

3、QMessageBox::warning

(1)函数介绍:

image-20210328002230007

翻译:打开一个警告消息框,在指定的父窗口小部件之前带有给定的标题和文本。
标准按钮将添加到消息框中。 defaultButton指定按下Enter键时使用的按钮。 defaultButton必须引用按钮中给定的按钮。 如果defaultButton为QMessageBox :: NoButton,则QMessageBox会自动选择一个合适的默认值。
返回被单击的标准按钮的标识。 如果改为按Esc键,则返回转义按钮。
该消息框是一个应用程序模式对话框。
警告:在执行对话框期间,请勿删除父项。 如果要执行此操作,则应使用QMessageBox构造函数之一自己创建对话框。
此功能在Qt 4.2中引入。

参数:

QWidget *parent :父窗体

const QString &title :窗口标题

const QString &text :提示文本

QMessageBox::StandardButtons buttons = Ok :要添加的标准按钮,可添加多个,使用 |分隔开

QMessageBox::StandardButton defaultButton = NoButton :默认选中的按钮(即指定按下Enter键时使用的按钮)

(2)使用举例:
    warningBtn = new QPushButton;
    warningBtn->setText(tr("WaringMsg"));


void MsgBoxDlg::showWarningMsg()
{
    label->setText(tr("Waring Message Box"));
    switch(QMessageBox::warning(this,tr("Warning消息框"),
                                tr("您修改的内容还未保存,是否要保存对文档的修改?"),
                                QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,
                                QMessageBox::Save))
    {
        case QMessageBox::Save:
            label->setText(tr("Waring Button /Save"));break;
        case QMessageBox::Discard:
            label->setText(tr("Waring Button /Discard"));break;
        case QMessageBox::Cancel:
            label->setText(tr("Waring Button /Cancel"));break;
        default:
            break;
    }
    return;
}
(3)运行截图:

image-20210328002923069

4、QMessageBox::critical

(1)函数介绍:

image-20210328003213017

翻译:打开一个关键消息框,在给定的父窗口小部件之前带有给定的标题和文本。
标准按钮将添加到消息框中。 defaultButton指定按下Enter键时使用的按钮。 defaultButton必须引用按钮中给定的按钮。 如果defaultButton为QMessageBox :: NoButton,则QMessageBox会自动选择一个合适的默认值。
返回被单击的标准按钮的标识。 如果改为按Esc键,则返回转义按钮。
该消息框是一个应用程序模式对话框。
警告:在执行对话框期间,请勿删除父项。 如果要执行此操作,则应使用QMessageBox构造函数之一自己创建对话框。
此功能在Qt 4.2中引入。

参数:

QWidget *parent :父窗体

const QString &title :窗口标题

const QString &text :提示文本

QMessageBox::StandardButtons buttons = Ok :要添加的标准按钮,可添加多个,使用 |分隔开

QMessageBox::StandardButton defaultButton = NoButton :默认选中的按钮(即指定按下Enter键时使用的按钮)

(2)使用举例:
    criticalBtn = new QPushButton;
    criticalBtn->setText(tr("CriticalMsg"));

void MsgBoxDlg::showCriticalMsg()
{
    label->setText(tr("Critical Message Box"));
    QMessageBox::critical(this,tr("Critical 消息框"),tr("这个是一个Critical消息测试!"));
    return;
}
(3)运行截图:

image-20210328003514491

5、QMessageBox::about

(1)函数介绍:

image-20210328003724529

翻译:显示带有标题标题和文本的简单“关于”框。 “关于”框的父级是父级。
about()在四个位置寻找合适的图标:
如果存在的话,它更喜欢parent-> icon()。
如果不是,它将尝试包含父级的顶级窗口小部件。
如果失败,它将尝试活动窗口。
作为最后的手段,它使用“信息”图标。
“关于”框有一个标记为“确定”的按钮。 在macOS上,about框作为无模式窗口弹出; 在其他平台上,它目前是应用程序模式。

参数:

QWidget *parent :父窗体

const QString &title :窗体标题

const QString &text :提示文本

(2)使用举例:
    aboutBtn = new QPushButton;
    aboutBtn->setText(tr("AboutBtnMsg"));

void MsgBoxDlg::showAboutMsg()
{
    label->setText(tr("About Message Box"));
    QMessageBox::about(this,tr("About 消息框"),tr("这是一个 About 消息框测试!"));
    return;
}
(3)运行截图:

image-20210328003533038

6、QMessageBox::aboutQt

(1)函数介绍:

image-20210328004247781

翻译:显示有关Qt的简单消息框,其中带有给定的标题,并以父级居中(如果父级不为0)。 该消息包括应用程序正在使用的Qt的版本号。
如菜单示例所示,这对于包含在应用程序的“帮助”菜单中很有用。
QApplication提供此功能作为插槽。
在macOS上,about框作为无模式窗口弹出; 在其他平台上,它目前是应用程序模式。

参数:

QWidget *parent :父窗体

const QString &title = QString() :窗体标题

(2)使用举例:
    aboutQtBtn = new QPushButton;
    aboutQtBtn->setText(tr("AboutQtBtnMsg"));

void MsgBoxDlg::showAboutQtMsg()
{
    label->setText(tr("About Qt Message Box"));
    QMessageBox::aboutQt(this,tr("About Qt消息框"));
    return;
}
(3)运行截图:

image-20210328003548235

六、用户自定义消息对话框

实现内容:

实现一个用户自定义的消息框,即非标准对话框,使用QMessageBox创建一个原始的对话框窗体,自定义去添加一些东西,比如标签,按钮。最重要的还是他的标准对话框按钮返回信息。

调用的函数名:

下面这些都是QMessageBox类下的一些方法,要用这些方法去丰富对话框窗体(当然肯定不止这些)

setWindowTitle()

addButton()

setText()

setIconPixmap()

exec()

clickedButton()

单个函数介绍:

(1)customMsgBox.setWindowTitle()

函数介绍:

image-20210328170042389

翻译:这个函数遮盖了QWidget :: setWindowTitle()。
将消息框的标题设置为title。 在macOS上,窗口标题将被忽略(如macOS准则所要求)。
此功能在Qt 4.2中引入。

参数:

const QString &title :窗口标题

使用举例:

setWindowTitle(tr("用户自定义消息框")); 	//直接用字符串即可,tr() 是方便国际化

(2)customMsgBox.addButton()

函数介绍:

image-20210328170633064

翻译:这是一个重载功能。
用给定的文本创建一个按钮,将其添加到指定角色的消息框中,然后返回它。
此功能在Qt 4.2中引入。

参数:

const QString &text :按钮上显示的文字

QMessageBox::ButtonRole role :选择何种性质的按钮

返回:

返回一个按钮对象

使用举例:

QPushButton *yesBtn = customMsgBox.addButton(tr("是"),QMessageBox::YesRole);
QPushButton *noBtn = customMsgBox.addButton(tr("否"),QMessageBox::NoRole);
QPushButton *cancelBtn = customMsgBox.addButton(QMessageBox::Cancel);

(3)customMsgBox.setText()

函数介绍:

image-20210328171210189

翻译:此属性保存要显示的消息框文本。
文本将被解释为纯文本还是富文本,具体取决于文本格式设置(QMessageBox :: textFormat)。 默认设置为Qt :: AutoText,即消息框将尝试自动检测文本格式。
此属性的默认值为一个空字符串。

参数:

const QString &text :要显示的文本,此文本可以是纯文本或富文本,默认是自动检测

使用举例:

//customMsgBox.setText(tr("这是一个用户自定义消息框"));
customMsgBox.setText("<h1>一级标题</h1>");
文本设置:

image-20210328172613621

翻译:此枚举用于可同时显示纯文本和富文本的小部件,例如QLabel。 它用于确定是否应将一个文本字符串解释为一个或另一个。 通常通过将枚举值之一传递给QTextEdit :: setTextFormat()函数来完成。

运行截图:

image-20210328172455650

(4)customMsgBox.setIconPixmap()

函数介绍:

image-20210328174940297

翻译:此属性保存当前图标
消息框当前使用的图标。 注意,通常很难绘制一张看起来适合所有GUI样式的像素图。 您可能需要为每个平台提供不同的像素图。
默认情况下,此属性是未定义的。

说明:使用setIconPixmap()和使用setIcon()区别就在于一个是自定义图标,另一个是使用默认标准消息对话框图标。

参数:

const QPixmap &pixmap :一张图片的地址,(可以自选图片作为对话框的图标)

使用举例:

customMsgBox.setIconPixmap(QPixmap("Head portrait.jpg"));	//这里我直接放在makefile所在文件下,所以可以直接读取到,算是相对路径

如果使用setIcon(),就成标准消息对话框类似了

image-20210328173910478

(5)customMsgBox.exec()

函数介绍:

image-20210328173100059

翻译:将对话框显示为模态对话框,直到用户关闭为止。该函数返回一个DialogCode结果。

(6)customMsgBox.clickedButton()

函数介绍:

image-20210328175557796

翻译:返回用户单击的按钮;如果用户按下Esc键并且未设置任何退出按钮,则返回0。
如果尚未调用exec(),则返回nullptr。

使用举例:

QPushButton *yesBtn = customMsgBox.addButton(tr("是"),QMessageBox::YesRole);
QPushButton *noBtn = customMsgBox.addButton(tr("否"),QMessageBox::NoRole);
QPushButton *cancelBtn = customMsgBox.addButton(QMessageBox::Cancel);

if(customMsgBox.clickedButton() == yesBtn)
{
    label->setText(tr("Custom Message Box/Yes"));
}
if(customMsgBox.clickedButton() == noBtn)
{
    label->setText(tr("Custom Message Box/No"));
}
if(customMsgBox.clickedButton() == cancelBtn)
{
    label->setText(tr("Custom Message Box/Cancel"));
}

代码实现:

    //================自定义消息对话框==================//
    CustomBtn = new QPushButton;
    CustomBtn->setText(tr("用户自定义消息对话框"));
    label = new QLabel;
    label->setFrameStyle(QFrame::Panel|QFrame::Sunken);	//设置标签形状,用于显示一些按钮返回信息

    //添加到布局管理
    mainLayout->addWidget(CustomBtn,4,0);
    mainLayout->addWidget(label,4,1);

    //添加事件关联
    connect(CustomBtn,&QPushButton::clicked,this,&Dialog::showCustomDlg);

void Dialog::showCustomDlg()
{
    label->setText(tr("Custom Message Box"));
    QMessageBox customMsgBox;
    customMsgBox.setWindowTitle(tr("用户自定义消息框"));    //设置消息框的标题
    //QPushButton *yesBtn = customMsgBox.addButton(tr("Yes"),QMessageBox::ActionRole);
    QPushButton *yesBtn = customMsgBox.addButton(tr("是"),QMessageBox::YesRole);
    QPushButton *noBtn = customMsgBox.addButton(tr("否"),QMessageBox::NoRole);
    QPushButton *cancelBtn = customMsgBox.addButton(QMessageBox::Cancel);

    //框体设置
    customMsgBox.setText(tr("这是一个用户自定义消息框"));
    customMsgBox.setIconPixmap(QPixmap("Head portrait.jpg"));
    //消息图标
    customMsgBox.icon();
    customMsgBox.exec();

    if(customMsgBox.clickedButton() == yesBtn)
    {
        label->setText(tr("Custom Message Box/Yes"));
    }
    if(customMsgBox.clickedButton() == noBtn)
    {
        label->setText(tr("Custom Message Box/No"));
    }
    if(customMsgBox.clickedButton() == cancelBtn)
    {
        label->setText(tr("Custom Message Box/Cancel"));
    }
    return;
}

运行截图:

image-20210328004612677

七、项目下载

点击下载完整项目

注:Typora转过来的总觉得有点怪怪的,或许用Typora更有感觉吧。Typora笔记源文件下载
在这里插入图片描述

最后:希望本文能让你有所收获 谢谢!

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值