gpt4 book ai didi

c++ - 即使 QCloseEvent 被忽略,窗口也被隐藏

转载 作者:可可西里 更新时间:2023-11-01 15:25:13 26 4
gpt4 key购买 nike

我目前正在尝试将我的 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();
}

预期的行为如下:如果单击“中止”,事件将被忽略,窗口保持打开状态。这在 Linux 和 Windows 上按预期工作。然而,在 OSX 上,该窗口是隐藏的,但在后台仍然处于事件状态。我在这里错过了什么?如何确保窗口保持打开状态?

更新:我不知何故认为这是 Qt5 的问题。如果 closeEvent 方法仅由 event->ignore(); 组成,则窗口仍然关闭。我认为这不是预期的行为。也许我应该将这个问题发布到 Qt 邮件列表中……

更新:这是 Qt 中的一个错误,从 5.1 版开始已解决。

最佳答案

我在 Mac 10.7 上安装了 Qt 4.7,但无法重现此错误。

我相信每次忽略 event 时只需将 show() 放在 Q_OS_MAC 宏之间就可以了。像这样:

event->ignore();
#ifdef Q_OS_MAC
show();
#endif

这可能不是完美的解决方案,但肯定能解决这个问题。

关于c++ - 即使 QCloseEvent 被忽略,窗口也被隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14649606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com