QMessageBox 用于显示消息提示。我们一般会使用其提供的几个 static 函数:
1、显示关于对话框:
// 关于对话框:该对话框只有一个 OK 按钮
// 参数1:父对象;
// 参数2:对话框标题;
// 参数3:对话框内容;
QMessageBox::about(this, "关于对话框", "服务暂停,请稍后再试!");
结果:

2、显示关于 Qt 对话框。该对话框用于显示有关 Qt 的信息:
// 显示关于 Qt 对话框。该对话框用于显示有关 Qt 的信息。
// 参数1:父对象;
// 参数2:对话框标题;
QMessageBox::aboutQt(this, "关于对话框");
结果:

3、显示严重错误对话框:
// 显示严重错误对话框。这个对话框将显示一个红色的错误符号。我们可以通过 参数4 指明其
// 显示的按钮,默认情况下只有一个 Ok 按钮,我们可以使用 StandardButtons 类型指定多种按钮。
// 该方法有一个返回值,用于确定用户点击的是哪一个按钮。
// 参数1:父对象;
// 参数2:对话框标题;
// 参数3:对话框内容;
// 参数4:关联的按键类型,可以使用或(|)运算符,指定对话框应该出现的按钮;
// 参数5:指定默认选择的按钮(只能选择在 参数4 中列出的按钮类型);可以省略,默认选择第一个按钮。
int result = QMessageBox::critical(this, "错误对话框", "保存信息出错,是否继续执行?",
QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok);
if (result == QMessageBox::Ok)
{
qDebug() << "点击了 OK 按钮";
}
else
{
qDebug() << "点击了 Cancel 按钮";
}
结果:

4、显示普通信息对话框:这个对话框将显示一个蓝色的信息符号。用法和 critical 一样:
int result = QMessageBox::information(this, "信息对话框", "保存信息出错,是否继续执行?",
QMessageBox::Ok | QMessageBox::Cancel);
if (result == QMessageBox::Ok)
{
qDebug() << "点击了 OK 按钮";
}
else
{
qDebug() << "点击了 Cancel 按钮";
}
结果:

5、显示询问对话框:和 critical 用法一样,不同之处是该对话框显示一个问号图标,并且默认显示的按钮是 Yes 和 No:
int result = QMessageBox::question(this, "询问对话框", "是否保存文件?");
if (result == QMessageBox::Yes)
{
qDebug() << "点击了 Yes 按钮";
}
else if (result == QMessageBox::No)
{
qDebug() << "点击了 No 按钮";
}
结果:

6、显示警告对话框:用法和 critical 一样,不同之处是该对话框显示一个感叹号图标:
int result = QMessageBox::warning(this, "警告对话框", "保存信息出错,是否继续执行?",
QMessageBox::Ok | QMessageBox::Cancel);
if (result == QMessageBox::Ok)
{
qDebug() << "点击了 Ok 按钮";
}
else if (result == QMessageBox::Cancel)
{
qDebug() << "点击了 Cancel 按钮";
}
结果:

7、自定义消息框:
// 自定义消息框
QMessageBox msgBox;
msgBox.setWindowTitle("自定义消息框"); // 设置消息框标题
msgBox.setText("文档已被修改!"); // 设置消息框显示的内容
msgBox.setInformativeText("是否保存修改的内容?"); // 设置简单的说明文字
msgBox.setDetailedText("详细内容..."); // 设置详细内容
msgBox.setStandardButtons(QMessageBox::Save
| QMessageBox::Discard
| QMessageBox::Cancel); // 设置消息框显示的按钮类型
msgBox.setDefaultButton(QMessageBox::Save); // 设置默认选择的按钮
// 执行消息框(模态对话框,阻塞)
int ret = msgBox.exec();
switch (ret)
{
case QMessageBox::Save:
{
QString str = msgBox.detailedText(); // 获取详细内容
qDebug() << "保存文本!" << str.toUtf8().data();
break;
}
case QMessageBox::Discard:
{
qDebug() << "放弃更改,继续执行!";
break;
}
case QMessageBox::Cancel:
{
qDebug() << "取消更改,结束程序!";
break;
}
}
结果:
