QMessageBox exec 似乎没有返回 QDialog::D ialogCode

QMessageBox exec doesnt seem to return QDialog::DialogCode

本文关键字:QDialog ialogCode 返回 exec QMessageBox      更新时间:2023-10-16

我的应用程序的closeEvent()看起来像这样(Windows上的Qt 5.8.0(:

void MainWindow::closeEvent(QCloseEvent *event)
{
    if(some_changes_were_made)  // bool
    {
        QMessageBox mbox;
        mbox.setText("Page(s) have been changed.");
        mbox.setInformativeText("What do you want to do?");
        mbox.addButton("Exit now", QMessageBox::AcceptRole);
        mbox.addButton("Save page(s) first", QMessageBox::RejectRole);
        int exit_code = mbox.exec();
        if(exit_code == QDialog::Rejected)
        {
           // bail out of the close event so the user can save pages
           event->ignore();
           return;
        }
    }
    event->accept();
}

我很好奇文档是否错误,其中指出exec()返回一个QDialog::DialogCode. 它实际上似乎返回了QMessageBox::ButtonRole(有趣的是,这是反比值(。 还是我只是在这里做错了什么?

请原谅任何拼写错误,因为我无法在此处复制实际代码。

在此处查看 QMessageBox 参考。

它应该返回标准按钮回复之一。您正在使用QDialogBox回复,QMessageBox已经覆盖了QDialogBoxexec方法。

您要检查如下内容:

switch (exit_code) {
  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;
}

来源于同一链接。