QMessageBox exec似乎不返回QDialog :: DialogCode

时间:2019-02-11 19:52:40

标签: c++ qt

我的应用程序的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(有趣的是它的反值)。还是我在这里做错了什么?

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

1 个答案:

答案 0 :(得分:0)

在此处查看QMessageBox参考。

应该返回standardButton回复之一。您正在使用QDialogBox的回复,QMessageBox已覆盖QDialogBox的{​​{1}}方法。

您要检查以下内容:

exec

来自同一链接的来源。