- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我目前正在尝试将我的 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/
我的 MainWindow 创建了一个名为 wid 的 QWidget。如何创建一个在该小部件关闭时激活的插槽? 最佳答案 您可以继承 QWidget 并添加如下功能: class Closeable
我有一个用 C++ 和 Qt 编写的桌面 Windows 应用程序。该应用程序有几个顶级窗口,偶尔需要以编程方式关闭和重新创建。此外,当程序的用户单击关闭按钮(最小化和最大化按钮旁边的那个)时,整个程
我想创建一条消息,当用户按下退出按钮时,该消息会出现在新窗口中。为此,我创建了一个 QCloseEvent,但 MainWindow 实际上根本没有关闭。我究竟做错了什么? 主窗口.h class M
我已经覆盖了登录对话框的 .h 文件中的 closeEvent 函数,以便它在发出时退出程序: void closeEvent(QCloseEvent *event){exit(0)} 但是,
我正在尝试做一些非常简单的事情:添加一个带有 Exit 操作的菜单栏,该操作将在选择时关闭 QMainWindow 。但是,当我实际单击 Exit 时,它不会关闭应用程序。 SSCCE: from P
我目前正在尝试将我的 Qt 应用程序移植到 Mac OSX,但遇到了以下问题: 我的一个窗口类(派生自 QMainWindow)在按下关闭按钮时显示一个对话框,您可以在其中保存/放弃更改或中止。这是通
我的主窗口中有 2 个触发器1.从完全关闭应用程序的菜单2. 从窗口 X 按钮忽略并隐藏窗口。我正在使用这个 SIGNAL/SLOTS我怎么知道它是从哪里触发的? 在closeEvent中: conn
我是一名优秀的程序员,十分优秀!