欢迎小伙伴的点评✨✨,相互学习、互关必回、全天在线🍳🍳🍳
博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩🚀
在实际的程序开发中,经常会用到各种各样的消息框来为用户提供一些提示或提醒, Qt 提供了 QMessageBox 类用千实现此项功能。常用的消息对话框包括 Question 消息框、 Information 消息框、 Warning 消息框、 Critical 消息框、 About (关于)消息框、 About (关于) Qt 消息框及 Custom (自定义)消息框。其中,Question 消息框、 Information 消息框、 Warning 消息框和 Critical 消息框的用法大同小异。这些消息框通常都包含为用户提供一些提醒或一些简单询问用的一个图标、一条提示信息及若干个按钮。 Question 消息框为正常的操作提供一个简单的询问: Information 消息框为正常的操作提供一个提示: Warning 消息框提醒用户发生了一个错误: Critical 消息框警告用户发生了一个严重错误。
Question 消息框使用 QMessageBox: :question() 函数完成,该函数形式如下:
StandardButton QMessageBox::question
(
QWidget* parent, //消息框的父窗口指针
const QString& title, //消息框的标题栏
const QString& text, //消息框的文字提示信息
StandardButtons buttons=Ok, //注(1)
StandardButton defaultButton=NoButton //注(2)
)
注:
(1) 填写希望在消息框中出现的按钮,可根据需要在标准按钮中选择,用 “I” 连写,默认为 QMessageBox::Ok 。QMessageBox 类提供了许多标准按钮,
如 QMessageBox::Ok 、 QMessageBox: :Close 、 QMessageBox: :Discard 等。虽然在此可以选择,但并不是随意选择的,应注意按常规成对出现。例如,通常Save 与 Discard 成对出现,而Abort 、 Retry 、 Ignore 则一起出现。
(2)默认按钮,即消息框出现时,焦点默认处于哪个按钮上。
Information 消息框使用 QMessageBox::information() 函数完成,该函数形式如下:
StandardButton QMessageBox::information
(
QWidget *parent, //消息框的父窗口指针
const QString& title, //消息框的标题栏
const QString& text, //消息框的文字提示信息
StandardButtons buttons=Ok, //同Question消息框的注释内容
StandardButton defaultButton=NoButton //同Question消息框的注释内容
)
Warning 消息框使用 QMessageBox : :warning() 函数完成,该函数形式如下:
StandardButton QMessageBox::warning
(
QWidget* parent, //消息框的父窗口指针
const QString& title, //消息框的标题栏
const QString& text, //消息框的文字提示信息
StandardButtons buttons=Ok, //同Question消息框的注释内容
StandardButton defaultButton=NoButton //同Question消息框的注释内容
)
Critical 消息框使用 QMessageBox: :critical() 函数完成,该函数形式如下:
StandardButton QMessageBox::critical
(
QWidget* parent, //消息框的父窗口指针
const QString& title, //消息框的标题栏
const QString& text, //消息框的文字提示信息
StandardButtons buttons=Ok, //同Question消息框的注释内容
StandardButton defaultButton=NoButton //同Question消息框的注释内容
)
About 消息框使用 QMessageBox : :about() 函数完成,该函数形式如下:
void QMessageBox::about
(
QWidget* parent, //消息框的父窗口指针
const QString& title, //消息框的标题栏
const QString& text //消息框的文字提示信息
)
About Qt 消息框使用 QMessageBox:: aboutQt()函数完成,该函数形式如下:
void QMessageBox::aboutQt
(
QWidget* parent, //消息框的父窗口指针
const QString& title=QString() //消息框的标题栏
)
图一
(1)添加该工程的提供主要显示标准消息对话框界面的函数所在的文件,在"DialogExample"项目名上单击鼠标右键,在弹出的快捷菜单中选择“添加新文件…”选项,在弹出的对话框中选择 “C++ Class” 选项,单击 "Choose…”按钮,在弹出的对话框的 “Base class” 下拉列表框中输入基类名 “QDialog”, 在 “Class name” 文本框中输入类的名称 “MsgBoxDlg” 。
(2) 单击“下一步”按钮,单击“完成”按钮,在该工程中就添加了 “msgboxdlg.h” 头文
件和 “msgboxdlg.cpp” 源文件。
#ifndef DIALOG_H
#define DIALOG_H
#include
#include
#include
#include
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = nullptr);
~Dialog();
private:
Ui::Dialog *ui;
QPushButton *MsgBtn;
MsgBoxDlg *msgDlg;
QGridLayout *mainLayout;
private slots:
void showMsgDlg();
};
#endif // DIALOG_H
#ifndef MSGBOXDLG_H
#define MSGBOXDLG_H
#include
#include
#include
#include
#include
class MsgBoxDlg : public QDialog
{
Q_OBJECT
public:
MsgBoxDlg(QWidget* parent=0);
private slots:
void showQuestionMsg();
void showinformationMsg();
void showWarningMsg();
void showCriticalMsg ();
void showAboutMsg();
void showAboutQtMsg();
private:
QLabel *label;
QPushButton *questionBtn;
QPushButton *informationBtn;
QPushButton *warningBtn;
QPushButton *criticalBtn;
QPushButton *aboutBtn;
QPushButton *aboutQtBtn;
QGridLayout *mainLayout;
};
#endif // MSGBOXDLG_H
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
MsgBtn = new QPushButton;
MsgBtn->setText(tr("标准消息对话框实例"));
MsgBtn->setStyleSheet("border:2px groove gray;border-radius:10px;padding:2px 4px;"); //设置按钮形状
//添加布局管理:
mainLayout = new QGridLayout(this);
mainLayout->addWidget(MsgBtn,3,1);
connect (MsgBtn, SIGNAL (clicked()), this, SLOT (showMsgDlg()));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::showMsgDlg()
{
msgDlg = new MsgBoxDlg();
msgDlg->show();
}
#include "dialog.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}
#include "msgboxdlg.h"
MsgBoxDlg::MsgBoxDlg(QWidget *parent):QDialog (parent)
{
setWindowTitle(tr("标准消息对话框实例")); //设置对话框的标题
label = new QLabel;
label->setText(tr("请选择一种消息框"));
questionBtn = new QPushButton;
questionBtn->setText(tr("QuestionMsg"));
informationBtn = new QPushButton;
informationBtn->setText(tr("InformationMsg"));
warningBtn = new QPushButton;
warningBtn->setText(tr("WarningMsg"));
criticalBtn = new QPushButton;
criticalBtn->setText(tr("criticalMsg"));
aboutBtn =new QPushButton;
aboutBtn->setText(tr("AboutMsg"));
aboutQtBtn = new QPushButton;
aboutQtBtn->setText(tr("AboutQtMsg"));
//布局
mainLayout = new QGridLayout(this);
mainLayout->addWidget(label,0,0,1,2);
mainLayout->addWidget(questionBtn,1,0);
mainLayout->addWidget(informationBtn,1,1);
mainLayout->addWidget(warningBtn,2,0);
mainLayout->addWidget(criticalBtn,2,1);
mainLayout->addWidget(aboutBtn,3,0);
mainLayout->addWidget(aboutQtBtn,3,1);
//事件关联
connect(questionBtn,SIGNAL(clicked()),this,SLOT(showQuestionMsg()));
connect (informationBtn, SIGNAL (clicked()), this, SLOT(showinformationMsg ()));
connect (warningBtn, SIGNAL (clicked()), this, SLOT(showWarningMsg()));
connect (criticalBtn, SIGNAL (clicked()), this, SLOT (showCriticalMsg ()));
connect (aboutBtn, SIGNAL (clicked()), this, SLOT (showAboutMsg ()));
connect (aboutQtBtn, SIGNAL (clicked()), this, SLOT (showAboutQtMsg ()));
}
void MsgBoxDlg::showQuestionMsg()
{
label->setText(tr("Question Message Box"));
bool abc = QMessageBox::question(this,tr("Question 消息框"),
tr(" 您现在已经修改完成,是否要结束程序?"),
QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok);
switch (abc)
{
case QMessageBox::Ok:
label->setText("Question button/Ok");
break;
case QMessageBox::Cancel:
label->setText("Question button/Cancel");
break;
default:
break;
}
return;
}
void MsgBoxDlg::showinformationMsg()
{
label->setText(tr("Information Message Box"));
QMessageBox::information(this,tr("Information 消息框"),
tr(" 这是 Information 消息框测试,欢迎您!"));
return;
}
void MsgBoxDlg::showWarningMsg()
{
label->setText(tr("Warning Message Box"));
switch(QMessageBox::warning(this,tr("Warning 消息框"),
tr(" 您修改的内容还未保存,是否要保存对文档的修改?"),
QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,
QMessageBox::Save))
{
case QMessageBox::Save:
label->setText(tr("Warning button/Save"));
break;
case QMessageBox::Discard:
label->setText(tr("Warning button/Discard"));
break;
case QMessageBox::Cancel:
label->setText(tr("Warning button/Cancel"));
break;
default:
break;
}
return;
}
void MsgBoxDlg::showCriticalMsg()
{
label->setText(tr("Critical Message Box"));
QMessageBox::critical(this,tr("Critical 消息框") ,tr("这是一个 Critical 消息框测试!"));
return;
}
void MsgBoxDlg::showAboutMsg()
{
label->setText(tr("About Message Box"));
QMessageBox::about(this,tr("About消息框") ,tr(" 这是一个 About 消息框测试!"));
return;
}
void MsgBoxDlg::showAboutQtMsg()
{
label->setText(tr("About Qt Message Box"));
QMessageBox::aboutQt(this,tr("About Qt消息框")) ;
return;
}
消息对话框也是在应用程序中经常用到的