我有一个 Qt 应用程序,其中只有一个不是 MainWindow
的小部件,只是一个 QLabel
。它没有标题栏(通过 setWindowFlags(Qt::FramelessWindowHint)
获得),因此标准的最小化和最大化按钮不可用。但是在小部件的一侧有一个侧边栏,我们在其中提供了一个最小化按钮,该按钮的行为应与标准最小化按钮相同。
我该怎么做?
我在 Minimizing a Qt application 尝试了解决方案和 Qt C++ minimize and maximize window .两者都不起作用。我当然可以隐藏应用程序,点击最小化按钮。问题是,如何通过标准机制恢复?
场景:
在 Mac 上,单击 Dock 图标。值得庆幸的是,OS X native API 可以在单击停靠栏图标时给我一个通知,因此我可以基于此取消隐藏小部件并将其激活。
在 Mac 上,应用程序图标在
/Applications
中双击,或在Launchpad
中单击。我如何收到这方面的通知?代码甚至没有到达main.cpp
,如果它被隐藏,我可以从那里取消隐藏。在 Windows 上,单击任务栏中的应用程序图标(该应用程序没有托盘图标)。如何获得相关通知并取消隐藏?
在 Windows 上,可以在程序文件中双击应用程序图标,也可以是桌面快捷方式图标。我如何收到取消隐藏它的通知?
如果此方法不正确,我该如何在 Mac 和 Windows 上按照标准行为显示和隐藏应用程序?
平台 - Qt 5.3.1,32 位。
最佳答案
这不是答案,但它可能有助于找出触发了哪些事件(第 1、2 和 3 点)。
#include <QApplication>
class newapp : public QApplication {
Q_OBJECT
public:
newapp( int &argc, char **argv ) : QApplication(argc, argv) {}
protected:
bool event(QEvent *ev) {
std::cerr << "APPLICATION EVENT " << ev->type() << std::endl;
return QApplication::event(ev);
}
};
在你的 main.cc
中你将拥有
newapp myapp(argc,argv);
代替
QApplication myapp(argc,argv)
一旦你确定了触发的事件,你就快完成了:你需要告诉你 newapp 恢复 Qlabel
的大小(有很多方法可以做到这一点,所以提供你的实现,你可能会得到更有针对性的帮助)
对于第 4 点,这是由于操作系统之间的不同行为造成的,因为在 Windows 中,第二次双击一个应用程序,将启动该应用程序的另一个实例(在 OSx 上,它将引发第一个打开的应用程序)。你可能会在这个项目中找到适合你的东西HERE
关于c++ - Qt - 在没有标准标题栏按钮的情况下最小化和最大化应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35068155/