【发布时间】:2016-01-28 17:33:25
【问题描述】:
我有一个 Qt 应用程序,其中只有一个小部件不是 MainWindow,而是一个 QLabel。它没有标题栏(通过setWindowFlags(Qt::FramelessWindowHint) 获得),因此标准的最小化和最大化按钮不可用。但是在小部件的一侧有一个侧边栏,我们提供了一个最小化按钮,该按钮应该作为标准的最小化按钮。
我该怎么做?
我在Minimizing a Qt application 和Qt C++ minimize and maximize window 尝试了解决方案。两者都不起作用。我当然可以在单击最小化按钮时隐藏应用程序。问题是,如何通过标准机制恢复?
场景:
在 Mac 上,单击停靠图标。幸运的是,OS X 原生 API 可以在单击停靠图标时给我一个通知,因此我可以取消隐藏小部件并使其处于活动状态。
在 Mac 上,应用程序图标在
/Applications中双击,或在Launchpad中单击。我如何获得这方面的通知?代码甚至没有到达main.cpp,如果它被隐藏,我可以从那里取消隐藏它。在 Windows 上,单击任务栏中的应用程序图标(该应用程序没有托盘图标)。如何获得通知并取消隐藏?
在 Windows 上,应用程序图标在 Program Files 中被双击,或者可能是桌面快捷方式图标。如何获得取消隐藏的通知?
如果这种方法不正确,我如何按照 Mac 和 Windows 上的标准行为显示和隐藏应用程序?
平台 - Qt 5.3.1,32 位。
【问题讨论】:
-
你可以在接受最小化之前尝试
saveGeometry和saveState,然后是restoreGeometry和restoreStatedoc.qt.io/qt-5/restoring-geometry.html -
你能给出一个示例代码,或者一个最小的工作示例吗?
-
原则上它发生了一些事情,它应该被
event(QEvent *ev)捕获,所以通过在你的QLabel这个方法中重新实现,你应该能够通过检查来查看附加内容和事件ev->type()值。 -
是的,问题是如何最小化它(而不是关闭它),以及如何在我所说的多个场景下恢复它。我仍然没有得到你。一个小的示例代码会很好..
标签: c++ qt minimize qmainwindow