我有一个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上,在“程序文件”中双击应用程序图标,或者可以是桌面快捷方式图标。如何取消通知以取消隐藏?
如果此方法不正确,如何按照Mac和Windows上的标准行为显示和隐藏应用程序?
平台 - Qt 5.3.1,32位。
答案 0 :(得分:3)
这不是一个答案,但它可能有助于整理出哪些事件被触发(第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
中找到适合您的内容