В настоящее время я пытаюсь перенести приложение Qt на Mac OSX и столкнулся с следующей проблемой:
Один из моих оконных классов (полученный из QMainWindow) отображает диалоговое окно при нажатии кнопки закрытия, где вы можете сохранять/отменять изменения или прерывать. Это делается путем переопределения closeEvent следующим образом:
void ResultsWindow::closeEvent(QCloseEvent* event)
{
if (isWindowModified())
{
activateWindow();
QMessageBox::StandardButton button = QMessageBox::warning(
this,
APPLICATION_NAME,
"Warning: data have been modified. Do you want to save the "
"changes?",
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Abort,
QMessageBox::Abort);
switch (button)
{
case QMessageBox::Save:
if (!Save())
{
event->ignore();
return;
}
break;
case QMessageBox::Discard:
break;
case QMessageBox::Abort:
default:
event->ignore();
return;
}
}
event->accept();
}
Ожидаемое поведение выглядит следующим образом: если вы нажмете "Abort", событие будет проигнорировано, и окно останется открытым. Это работает как в Linux, так и в Windows. Однако в OSX окно скрыто, но все еще активно в фоновом режиме. Что мне здесь не хватает? Как я могу убедиться, что окно остается открытым?
Update:
Я почему-то думаю, что это проблема с Qt5. Если метод closeEvent
состоит только из event->ignore();
, окно остается закрытым. Я не думаю, что это предполагаемое поведение. Возможно, я должен опубликовать эту проблему в списке рассылки Qt...
Обновление: Это была ошибка в Qt и решена с версии 5.1.