sas*_*alm 102 c++ qt qmessagebox
如何在Qt中显示带有是/否按钮的消息框,如何检查按下哪个按钮?
即一个看起来像这样的消息框:

Mat*_*Mat 174
假设小部件插槽中的示例:
#include <QApplication>
#include <QMessageBox>
#include <QDebug>
// ...
void MyWidget::someSlot() {
QMessageBox::StandardButton reply;
reply = QMessageBox::question(this, "Test", "Quit?",
QMessageBox::Yes|QMessageBox::No);
if (reply == QMessageBox::Yes) {
qDebug() << "Yes was clicked";
QApplication::quit();
} else {
qDebug() << "Yes was *not* clicked";
}
}
Run Code Online (Sandbox Code Playgroud)
应该在Qt 4和5上工作,需要QT += widgets在Qt 5上,CONFIG += console在Win32上查看qDebug()输出.
查看StandardButton枚举以获取可以使用的按钮列表; 该函数返回单击的按钮.您可以使用额外参数设置默认按钮(如果您没有或指定,Qt" 自动选择合适的默认值 " QMessageBox::NoButton).
red*_*aks 38
您可以使用QMessage对象创建消息框,然后添加按钮:
QMessageBox msgBox;
msgBox.setWindowTitle("title");
msgBox.setText("Question");
msgBox.setStandardButtons(QMessageBox::Yes);
msgBox.addButton(QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
if(msgBox.exec() == QMessageBox::Yes){
// do something
}else {
// do something else
}
Run Code Online (Sandbox Code Playgroud)
hky*_*kyi 18
QT可以像Windows一样简单.等效代码是
if (QMessageBox::Yes == QMessageBox(QMessageBox::Information, "title", "Question", QMessageBox::Yes|QMessageBox::No).exec())
{
}
Run Code Online (Sandbox Code Playgroud)
我错过tr了答案中的翻译电话。
最简单的解决方案之一,允许以后国际化:
if (QMessageBox::Yes == QMessageBox::question(this,
tr("title"),
tr("Message/Question")))
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
Qt在tr("Your String")调用中放置代码级字符串通常是一个好习惯。
(QMessagebox如上适用于任何QWidget方法)
编辑:
您可以QMesssageBox在QWidget上下文之外使用,请参阅@TobySpeight 的回答。
如果您甚至不在QObject上下文中,请替换tr为qApp->translate("context", "String")- 您需要#include <QApplication>