程序地带

QT的QMessageBox类的使用


详细说明 QMessageBox类提供了一个模式对话框,用于通知用户或询问用户问题并接收答案。 消息框显示用于向用户发出警报的主要文本,用于进一步说明警报或询问用户问题的信息性文本,以及用于在用户需要时提供更多数据的可选详细文本。消息框还可以显示一个图标和用于接受用户响应的标准按钮。 提供了两个使用QMessageBox的API,基于属性的API和静态函数。调用静态函数之一是更简单的方法,但它不如使用基于属性的API灵活,并且结果信息较少。建议使用基于属性的API。 基于属性的API 要使用基于属性的API,请构造QMessageBox的实例,设置所需的属性,然后调用exec()显示消息。最简单的配置是仅设置消息文本属性。


QMessageBox msgBox;
msgBox.setText("The document has been modified.");
msgBox.exec();

用户必须单击“确定”按钮才能关闭该消息框。 GUI的其余部分将被阻止,直到关闭消息框。 在这里插入图片描述 除了仅警告用户事件之外,一种更好的方法是还询问用户该怎么做。将问题存储在信息丰富的文本属性中,并将“标准按钮”属性设置为所需的按钮集作为用户响应集。通过使用按位OR运算符组合StandardButtons中的值来指定按钮。按钮的显示顺序取决于平台。例如,在Windows上,“保存”显示在“取消”的左侧,而在Mac OS上,顺序相反。 将您的标准按钮之一标记为默认按钮。


QMessageBox msgBox;
msgBox.setText(“文档已被修改。”);
msgBox.setInformativeText(“是否要保存更改?”);
msgBox.setStandardButtons(QMessageBox :: Save | QMessageBox :: Discard | QMessageBox :: Cancel);
msgBox.setDefaultButton(QMessageBox :: Save);
int ret = msgBox.exec();

这是macOS指南中建议的方法。类似的准则适用于其他平台,但是请注意针对不同平台处理信息性文本的不同方式。 在这里插入图片描述 exec()插槽返回被单击按钮的StandardButtons值。


switch (ret) {
case QMessageBox::Save:
// Save was clicked
break;
case QMessageBox::Discard:
// Don't Save was clicked
break;
case QMessageBox::Cancel:
// Cancel was clicked
break;
default:
// should never be reached
break;
}

要向用户提供更多信息以帮助他回答问题,请设置详细的文本属性。 如果设置了详细文本属性,将显示“Show Details…”按钮。 在这里插入图片描述 单击Show Details…按钮将显示详细文本。 在这里插入图片描述 请注意,静态功能签名的按钮参数已更改,现在可用于设置标准按钮和默认按钮。 静态函数可用于创建信息(),问题(),警告()和严重()消息框。


int ret = QMessageBox::warning(this, tr("My Application"),
tr("The document has been modified. "
"Do you want to save your changes?"),
QMessageBox::Save | QMessageBox::Discard
| QMessageBox::Cancel,
QMessageBox::Save);

“标准对话框”示例显示了如何使用QMessageBox和其他内置的Qt对话框。 高级用法 如果标准按钮不够灵活,不能用于消息框,则可以使用addButton()重载,该重载采用文本和ButtonRole来添加自定义按钮。 QMessageBox使用ButtonRole来确定屏幕上按钮的顺序(根据平台的不同而不同)。您可以在调用exec()之后测试clickedButton()的值。例如,


QMessageBox msgBox;
QPushButton *connectButton = msgBox.addButton(tr("Connect"), QMessageBox::ActionRole);
QPushButton *abortButton = msgBox.addButton(QMessageBox::Abort);
msgBox.exec();
if (msgBox.clickedButton() == connectButton) {
// connect
} else if (msgBox.clickedButton() == abortButton) {
// abort
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/it_xiangqiang/article/details/111246386

随机推荐

python操作办公自动化_Python办公自动化之操作excel

最近家属的工作有个频繁操作excel的事情,我想到可以利用python的办公自动化来解决这重复性的工作。py5分钟,节约两小时。整理了思路,理清了操作步骤如下...

weixin_39719749 阅读(917)

数据库设计三大范式

数据库设计三大范式

数据库设计三大范式为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据...

hello老杜 阅读(522)

菜鸟笔记之计算机网络(9)

菜鸟笔记之计算机网络(9)

第三章:数据链路1数据链路的作用数据链路相关技术MAC地址共享介质型网络非共享介质型网络根据MAC地址转发环路检测技术VLAN(虚拟局域网)声明:...

承蒙* 阅读(747)