作者:水瓶星人
座右铭:记录每一分痛点,分享每一点收获
说明:这篇来自书籍上的例程,即是笔记,也是分享。现在我也只是初学QT,文章若有错误还望指正,它能够对你有所帮助
文章目录
运行示意图
总体感受:就是调用,调用,调用。标准对话框嘛,自然是人家写好了的,直接调用就好了,关键是要知道调用哪个,怎么使用。
而遇到需要打开另一个多分类的就新建一个类窗口(继承QDialog以能打印窗口),添加一些按钮将那些标准窗口和其按钮相互关联起来,在将其类对象和主窗口中的按钮关联起来。比如:标准消息对话框和标准输入对话框。
先创建一个项目,并将其标题设置为:各种标准对话框的实例
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
this->setWindowTitle("各种标准对话框的实例"); //设置工程对话框标题——主窗体
}
这样运行的话将是一个空白窗体,窗体名称为:各种标准对话框的实例
如图:
接着就需要一个个往上添加按钮并关联相应事件(调用其相应类)。
下面就介绍一下这些标准对话框要调用哪些类,如何使用
一、文件标准对话框
实现内容:
文件标准对话框点击后选择一个文件(文件后缀自己限定),将其文件的路径打印出来
调用的函数名:QFileDialog::getOpenFileName
函数介绍:
翻译:这是一个便利的静态函数,它返回用户选择的现有文件。 如果用户按“取消”,它将返回一个空字符串。
参数介绍:
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);
}
运行截图:
二、颜色标准对话框
实现内容:
弹出对话框后选择一个颜色打印在一个框架窗体小部件上
调用的函数名:QColorDialog::getColor
函数介绍:
翻译:弹出带有给定窗口标题的模态颜色对话框(如果未指定,则为“选择颜色”),让用户选择一种颜色,然后返回该颜色。 颜色最初设置为初始。 该对话框是父级的子级。 如果用户取消对话框,它将返回无效的颜色(请参阅QColor :: isValid())。
options参数允许您自定义对话框。参数:
const QColor &initial = Qt::white :初始时选中的颜色
QWidget *parent = nullptr :父窗体
const QString &title = QString() :颜色选择框的标题
QColorDialog::ColorDialogOptions options = ColorDialogOptions() :自定义对话框选择
options 参考下:
代码实现:
//================标准颜色对话框==================//
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));
}
}
运行截图:
三、字体标准对话框
实现内容:
调用字体设置窗口,设置字体样式
调用的函数名:QFontDialog::getFont
函数介绍:
翻译:执行模式字体对话框并返回字体。
如果用户单击“确定”,则返回所选字体。 如果用户单击“取消”,则返回初始字体。
该对话框是使用给定的父级和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上使用)始终支持它们。
代码实现:
//================标准字体对话框==================//
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);
}
}
运行截图:
四、标准输入对话框
前情说明
此处涉及对话框较多,所以选择新建一个窗体,将触发对话框的按钮都布局在新窗体
主要思路就是:定义标签——定义按钮——定义槽函数——按钮和槽函数关联——槽函数调用标准对话框
实现内容:
对不同类型的数据进行输入,打印在旁边小部件上
调用的函数名:
QInputDialog::getText
QInputDialog::getItem
QInputDialog::getInt
QInputDialog::getDouble
两个窗口关联
//================标准输入对话框==================//
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();
}
总体运行截图:
单个函数介绍
1、QInputDialog::getText
(1)函数介绍:
翻译:静态便利函数,用于从用户那里获取字符串。
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)运行截图:
2、QInputDialog::getItem
(1)函数介绍:
翻译:静态便利功能,使用户可以从字符串列表中选择一个项目。
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 参考下:
(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)运行截图:
3、QInputDialog::getInt
(1)函数介绍
翻译:静态便利函数,用于从用户那里获取整数输入。
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)运行截图:
4、QInputDialog::getDouble
(1)函数介绍:
翻译:静态方便的功能,从用户那里获取一个浮点数。
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)运行截图:
五、标准消息对话框
前情说明
消息对话框和输入对话框一样,都分好多种,所以也新建一个窗体,将触发对话框的按钮都布局在新窗体上
实现内容:
测试各种消息对话框: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();
}
总运行截图:
单个函数介绍
1、QMessageBox::question
(1)函数介绍:
翻译:打开一个问题消息框,在给定的父窗口小部件前面带有给定的标题和文本。
标准按钮将添加到消息框中。 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 :默认选中的按钮
标准按钮参考下:
Constant Value Description QMessageBox::Ok 0x00000400 An “OK” button defined with the AcceptRole. QMessageBox::Open 0x00002000 An “Open” button defined with the AcceptRole. QMessageBox::Save 0x00000800 A “Save” button defined with the AcceptRole. QMessageBox::Cancel 0x00400000 A “Cancel” button defined with the RejectRole. QMessageBox::Close 0x00200000 A “Close” button defined with the RejectRole. QMessageBox::Discard 0x00800000 A “Discard” or “Don’t Save” button, depending on the platform, defined with the DestructiveRole. QMessageBox::Apply 0x02000000 An “Apply” button defined with the ApplyRole. QMessageBox::Reset 0x04000000 A “Reset” button defined with the ResetRole. QMessageBox::RestoreDefaults 0x08000000 A “Restore Defaults” button defined with the ResetRole. QMessageBox::Help 0x01000000 A “Help” button defined with the HelpRole. QMessageBox::SaveAll 0x00001000 A “Save All” button defined with the AcceptRole. QMessageBox::Yes 0x00004000 A “Yes” button defined with the YesRole. QMessageBox::YesToAll 0x00008000 A “Yes to All” button defined with the YesRole. QMessageBox::No 0x00010000 A “No” button defined with the NoRole. QMessageBox::NoToAll 0x00020000 A “No to All” button defined with the NoRole. QMessageBox::Abort 0x00040000 An “Abort” button defined with the RejectRole. QMessageBox::Retry 0x00080000 A “Retry” button defined with the AcceptRole. QMessageBox::Ignore 0x00100000 An “Ignore” button defined with the AcceptRole. QMessageBox::NoButton 0x00000000 An 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)运行截图:
2、QMessageBox::information
(1)函数介绍:
翻译:打开一个信息消息框,该消息框在指定的父窗口小部件之前带有给定的标题和文本。
标准按钮将添加到消息框中。 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)运行截图:
3、QMessageBox::warning
(1)函数介绍:
翻译:打开一个警告消息框,在指定的父窗口小部件之前带有给定的标题和文本。
标准按钮将添加到消息框中。 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)运行截图:
4、QMessageBox::critical
(1)函数介绍:
翻译:打开一个关键消息框,在给定的父窗口小部件之前带有给定的标题和文本。
标准按钮将添加到消息框中。 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)运行截图:
5、QMessageBox::about
(1)函数介绍:
翻译:显示带有标题标题和文本的简单“关于”框。 “关于”框的父级是父级。
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)运行截图:
6、QMessageBox::aboutQt
(1)函数介绍:
翻译:显示有关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)运行截图:
六、用户自定义消息对话框
实现内容:
实现一个用户自定义的消息框,即非标准对话框,使用QMessageBox创建一个原始的对话框窗体,自定义去添加一些东西,比如标签,按钮。最重要的还是他的标准对话框按钮返回信息。
调用的函数名:
下面这些都是QMessageBox类下的一些方法,要用这些方法去丰富对话框窗体(当然肯定不止这些)
setWindowTitle()
addButton()
setText()
setIconPixmap()
exec()
clickedButton()
单个函数介绍:
(1)customMsgBox.setWindowTitle()
函数介绍:
翻译:这个函数遮盖了QWidget :: setWindowTitle()。
将消息框的标题设置为title。 在macOS上,窗口标题将被忽略(如macOS准则所要求)。
此功能在Qt 4.2中引入。参数:
const QString &title :窗口标题
使用举例:
setWindowTitle(tr("用户自定义消息框")); //直接用字符串即可,tr() 是方便国际化
(2)customMsgBox.addButton()
函数介绍:
翻译:这是一个重载功能。
用给定的文本创建一个按钮,将其添加到指定角色的消息框中,然后返回它。
此功能在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()
函数介绍:
翻译:此属性保存要显示的消息框文本。
文本将被解释为纯文本还是富文本,具体取决于文本格式设置(QMessageBox :: textFormat)。 默认设置为Qt :: AutoText,即消息框将尝试自动检测文本格式。
此属性的默认值为一个空字符串。参数:
const QString &text :要显示的文本,此文本可以是纯文本或富文本,默认是自动检测
使用举例:
//customMsgBox.setText(tr("这是一个用户自定义消息框")); customMsgBox.setText("<h1>一级标题</h1>");
文本设置:
翻译:此枚举用于可同时显示纯文本和富文本的小部件,例如QLabel。 它用于确定是否应将一个文本字符串解释为一个或另一个。 通常通过将枚举值之一传递给QTextEdit :: setTextFormat()函数来完成。
运行截图:
(4)customMsgBox.setIconPixmap()
函数介绍:
翻译:此属性保存当前图标
消息框当前使用的图标。 注意,通常很难绘制一张看起来适合所有GUI样式的像素图。 您可能需要为每个平台提供不同的像素图。
默认情况下,此属性是未定义的。说明:使用setIconPixmap()和使用setIcon()区别就在于一个是自定义图标,另一个是使用默认标准消息对话框图标。
参数:
const QPixmap &pixmap :一张图片的地址,(可以自选图片作为对话框的图标)
使用举例:
customMsgBox.setIconPixmap(QPixmap("Head portrait.jpg")); //这里我直接放在makefile所在文件下,所以可以直接读取到,算是相对路径
如果使用setIcon(),就成标准消息对话框类似了
(5)customMsgBox.exec()
函数介绍:
翻译:将对话框显示为模态对话框,直到用户关闭为止。该函数返回一个DialogCode结果。
(6)customMsgBox.clickedButton()
函数介绍:
翻译:返回用户单击的按钮;如果用户按下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;
}
运行截图:
七、项目下载
注:Typora转过来的总觉得有点怪怪的,或许用Typora更有感觉吧。Typora笔记源文件下载
最后:希望本文能让你有所收获 谢谢!