我目前正在尝试将我的 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 上,该窗口是隐藏的,但在后台仍处于活动状态。我在这里想念什么?如何确保窗户保持打开状态?
更新:
我不知何故认为这是 Qt5 的问题。如果该closeEvent
方法不包含任何内容,但event->ignore();
窗口仍处于关闭状态。我不认为这是预期的行为。也许我应该将此问题发布到 Qt 邮件列表...</p>
更新:这是 Qt 中的一个错误,自 5.1 版起已解决。