二十、消息对话框QMessageBox
完成以下功能
创建一个QDialog工程
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include<QPushButton>
#include<QGridLayout>
#include<QLabel>
#include<QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
Ui::Dialog *ui;
QLabel *label;
QGridLayout *gl;
QPushButton *questionButton;
QPushButton *informationButton;
QPushButton *warningButton;
QPushButton *criticalButton;
QPushButton *aboutButton;
QPushButton *aboutqtButton;
private slots:
void questionFunc();
void informationFunc();
void warningFunc();
void criticalFunc();
void aboutFunc();
void aboutqtFunc();
};
#endif // DIALOG_H
dialog.cpp
实现简单的对象和布局
gl=new QGridLayout(this);
label=new QLabel("请选择任意对话框");
questionButton=new QPushButton("问题对话框");
informationButton=new QPushButton("信息对话框");
warningButton=new QPushButton("警告对话框");
criticalButton=new QPushButton("错误对话框");
aboutButton=new QPushButton("关于对话框");
aboutqtButton=new QPushButton("关于qt对话框");
gl->addWidget(questionButton,0,0);
gl->addWidget(informationButton,0,1);
gl->addWidget(warningButton,1,0);
gl->addWidget(criticalButton,1,1);
gl->addWidget(aboutButton,2,0);
gl->addWidget(aboutqtButton,2,1);
gl->addWidget(label,3,0,1,2);
实现所有槽函数
void Dialog::questionFunc()
{
label->setText("问题对话框");
switch(QMessageBox::question(this,"问题对话框","是否退出程序,请选择?",QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok))
{
case QMessageBox::Ok:
label->setText("Ok!");
break;
case QMessageBox::Cancel:
label->setText("Cancel!");
break;
default:
break;
}
}
void Dialog::informationFunc()
{
label->setText("信息对话框");
QMessageBox::information(this,"信息对话框","信息对话框测试成功");
}
void Dialog::warningFunc()
{
label->setText("警告对话框");
switch(QMessageBox::warning(this,"警告对话框","是否删除数据库?",QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save))
{
case QMessageBox::Save:
label->setText("保存");
break;
case QMessageBox::Discard:
label->setText("避免");
break;
case QMessageBox::Cancel:
label->setText("取消");
break;
default:
break;
}
}
void Dialog::criticalFunc()
{
label->setText("错误对话框");
QMessageBox::critical(this,"错误对话框","错误");
}
void Dialog::aboutFunc()
{
label->setText("关于对话框");
QMessageBox::about(this,"关于对话框","关于");
}
void Dialog::aboutqtFunc()
{
label->setText("关于QT对话框");
QMessageBox::aboutQt(this,"关于Qt对话框");
}
void QMessageBox:: about ( QWidget * parent , const QString & title , const QString & text ):
显示一个简单的关于 框,标题 标题 和文本文本。关于框的父框是父框 。
about() 在四个位置寻找合适的图标:
- 如果存在,它更喜欢 parent->icon()。
- 如果没有,它会尝试包含父 级 .
- 如果失败,它将尝试活动窗口。
- 作为最后的手段,它使用“信息”图标。
“关于”框有一个标有“确定”的按钮。在 macOS 上,关于框会弹出为无模式窗口;在其他平台上,它目前是应用程序模式。
void QMessageBox:: aboutQt ( QWidget * parent , const QString & title = QString()):
显示一个关于Qt的简单消息框,带有给定的标题,并以父项 为中心(如果parent 不是 )。该消息包括应用程序正在使用的Qt的版本号。 nullptr
这对于包含在应用程序的“帮助”菜单中很有用,如菜单 范例所示。
QApplication 以插槽的形式提供此功能。
在 macOS 上,关于框会弹出为无模式窗口;在其他平台上,它目前是应用程序模式。
QMessageBox::StandardButton QMessageBox:: critical ( QWidget * parent , const QString & title , const QString & text , QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton):
打开一个关键消息框,在指定的父级 前面有给定的标题和文本 小部件。
标准 buttons 被添加到消息框。 defaultButton 指定按下 Enter 时使用的按钮。 defaultButton 必须指 buttons 中给出的按钮。defaultButton 是 QMessageBox::NoButton ,QMessageBox 会自动选择合适的默认值。
返回单击的标准按钮的标识。如果按下 Esc,则 Esc 按钮 被返回。
消息框是 应用程序模态 对话框。
警告: 不要在对话框执行期间删除父项。如果你想这样做,你应该使用QMessageBox 构造函数之一自己创建对话框。
QMessageBox::StandardButton QMessageBox:: information ( QWidget * parent , const QString & title , const QString & text , QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton) :
打开信息消息框采用给定 在指定的父级 前面有给定的标题和文本 小部件。
标准 buttons 被添加到消息框。 defaultButton 指定按下 Enter 时使用的按钮。 defaultButton 必须指 buttons 中给出的按钮。defaultButton 是 QMessageBox::NoButton ,QMessageBox 会自动选择合适的默认值。
返回单击的标准按钮的标识。如果按下 Esc,则 Esc 按钮 被返回。
消息框是 应用程序模态 对话框。
警告: 不要在对话框执行期间删除父项。如果你想这样做,你应该使用QMessageBox 构造函数之一自己创建对话框。
QMessageBox::StandardButton QMessageBox:: question ( QWidget * parent , const QString & title , const QString & text , QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton) :
打开问题消息框采用给定在指定的父级 前面有给定的标题和文本 小部件。
标准 buttons 被添加到消息框。 defaultButton 指定按下 Enter 时使用的按钮。 defaultButton 必须指 buttons 中给出的按钮。defaultButton 是 QMessageBox::NoButton ,QMessageBox 会自动选择合适的默认值。
返回单击的标准按钮的标识。如果按下 Esc,则 Esc 按钮 被返回。
消息框是 应用程序模态 对话框。
警告: 不要在对话框执行期间删除父项。如果你想这样做,你应该使用QMessageBox 构造函数之一自己创建对话框。
QMessageBox::StandardButton QMessageBox:: warning ( QWidget * parent , const QString & title , const QString & text , QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton) :
在指定的父级 小部件前面打开一个警告消息框,其中包含给定的标题和文本。
标准 buttons 被添加到消息框。 defaultButton 指定按下 Enter 时使用的按钮。 defaultButton 必须指 buttons 中给出的按钮。 defaultButton 是 QMessageBox::NoButton ,QMessageBox 会自动选择合适的默认值。
返回单击的标准按钮的标识。如果按下 Esc,则 Esc 按钮 被返回。
消息框是 应用程序模态 对话框。
警告: 不要在对话框执行期间删除父项。如果你想这样做,你应该使用QMessageBox 构造函数之一自己创建对话框。
完整代码
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
resize(320,150);
gl=new QGridLayout(this);
label=new QLabel("请选择任意对话框");
questionButton=new QPushButton("问题对话框");
informationButton=new QPushButton("信息对话框");
warningButton=new QPushButton("警告对话框");
criticalButton=new QPushButton("错误对话框");
aboutButton=new QPushButton("关于对话框");
aboutqtButton=new QPushButton("关于qt对话框");
gl->addWidget(questionButton,0,0);
gl->addWidget(informationButton,0,1);
gl->addWidget(warningButton,1,0);
gl->addWidget(criticalButton,1,1);
gl->addWidget(aboutButton,2,0);
gl->addWidget(aboutqtButton,2,1);
gl->addWidget(label,3,0,1,2);
connect(questionButton,&QPushButton::clicked,this,&Dialog::questionFunc);
connect(informationButton,&QPushButton::clicked,this,&Dialog::informationFunc);
connect(warningButton,&QPushButton::clicked,this,&Dialog::warningFunc);
connect(criticalButton,&QPushButton::clicked,this,&Dialog::criticalFunc);
connect(aboutButton,&QPushButton::clicked,this,&Dialog::aboutFunc);
connect(aboutqtButton,&QPushButton::clicked,this,&Dialog::aboutqtFunc);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::questionFunc()
{
label->setText("问题对话框");
switch(QMessageBox::question(this,"问题对话框","是否退出程序,请选择?",QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok))
{
case QMessageBox::Ok:
label->setText("Ok!");
break;
case QMessageBox::Cancel:
label->setText("Cancel!");
break;
default:
break;
}
}
void Dialog::informationFunc()
{
label->setText("信息对话框");
QMessageBox::information(this,"信息对话框","信息对话框测试成功");
}
void Dialog::warningFunc()
{
label->setText("警告对话框");
switch(QMessageBox::warning(this,"警告对话框","是否删除数据库?",QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save))
{
case QMessageBox::Save:
label->setText("保存");
break;
case QMessageBox::Discard:
label->setText("避免");
break;
case QMessageBox::Cancel:
label->setText("取消");
break;
default:
break;
}
}
void Dialog::criticalFunc()
{
label->setText("错误对话框");
QMessageBox::critical(this,"错误对话框","错误");
}
void Dialog::aboutFunc()
{
label->setText("关于对话框");
QMessageBox::about(this,"关于对话框","关于");
}
void Dialog::aboutqtFunc()
{
label->setText("关于QT对话框");
QMessageBox::aboutQt(this,"关于Qt对话框");
}