是/否使用QMessageBox的消息框

sas*_*alm 102 c++ qt qmessagebox

如何在Qt中显示带有是/否按钮的消息框,如何检查按下哪个按钮?

即一个看起来像这样的消息框:

在此输入图像描述

Mat*_*Mat 174

你会用QMessageBox::question它.

假设小部件插槽中的示例:

#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)


Dom*_*Cat 5

我错过tr了答案中的翻译电话。

最简单的解决方案之一,允许以后国际化:

if (QMessageBox::Yes == QMessageBox::question(this,
                                              tr("title"),
                                              tr("Message/Question")))
{
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

Qttr("Your String")调用中放置代码级字符串通常是一个好习惯。

QMessagebox如上适用于任何QWidget方法)

编辑:

您可以QMesssageBoxQWidget上下文之外使用,请参阅@TobySpeight 的回答。

如果您甚至不在QObject上下文中,请替换trqApp->translate("context", "String")- 您需要#include <QApplication>