QMessageBox exec не возвращает QDialog :: DialogCode - PullRequest
0 голосов
/ 11 февраля 2019

Мое приложение closeEvent() выглядит примерно так (Qt 5.8.0 в Windows):

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 голосов
/ 11 февраля 2019

Проверка QMessageBox ссылка здесь.

Предполагается, что будет возвращен один из standardButton ответов.Вы используете QDialogBox ответов, QMessageBox уже переопределил QDialogBox exec метод.

Вы хотите проверить что-то вроде этого:

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;
}

Источник по той же ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...