是/否消息框使用 QMessageBox

新手上路,请多包涵

如何在 Qt 中显示带有“是/否”按钮的消息框,以及如何检查按下了哪些按钮?

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

在此处输入图像描述

原文由 sashoalm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

为此,您将使用 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";
  }
}

应该在 Qt 4 和 5 上工作,在 Qt 5 上需要 QT += widgets CONFIG += console 在 Win32 上需要 — 才能看到 qDebug() 输出。

请参阅 StandardButton 枚举以获取您可以使用的按钮列表;该函数返回被点击的按钮。您可以使用额外的参数设置默认按钮(如果您不指定或指定 QMessageBox::NoButton ,Qt“会 _自动选择合适的默认值_”)。

原文由 Mat 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您需要异步调用,您应该使用 openresult 方法,而不是 questionexecQWidget 方法中的示例代码:

 QMessageBox* const message = new QMessageBox(QMessageBox::Icon::Question, tr("Test"),
    tr("Quit?"), QMessageBox::Button::Yes | QMessageBox::Button::No, this);
message->setDefaultButton(QMessageBox::Button::No);
message->open();
connect(message, &QDialog::finished, this, [message] {
    message->deleteLater();
    if (message->result() == QMessageBox::Button::Yes) {
        QApplication::quit();
    }
});

它不应该只对退出对话框有用,但对于其他确认对话框,其中父小部件可能被外部事件破坏,它是避免崩溃的主要方法。

原文由 Nicolas D. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题