我正在删除我的应用程序的 Mac OS 版本的系统托盘图标。但是有一个小问题:当用户关闭主窗口时,应用程序应该继续在后台运行,如果用户单击停靠图标,主窗口应该再次可见。到目前为止,我还没有找到拦截图标点击的方法。
有什么方法可以用 Qt 完成这个吗?如果不是,我应该如何使用 native API 来实现此行为?
我试图创建一个实现 QApplication 的自定义应用程序类,以便我可以重新实现 macEventFilter,但是关于此函数的文档很少。
应用程序.h:
#ifndef APPLICATION_H
#define APPLICATION_H
#include <QApplication>
class QWidget;
class Application : public QApplication
{
Q_OBJECT
public:
Application(int, char*[]);
void setMainWidget(QWidget*);
bool macEventFilter(EventHandlerCallRef, EventRef);
private:
QWidget *mainWidget;
};
#endif // APPLICATION_H
应用程序.cpp:
#include <Application.h>
#include <QWidget>
Application::Application(int argc, char *argv[])
: QApplication(argc, argv)
{
}
void Application::setMainWidget(QWidget *mainWidget)
{
this->mainWidget = mainWidget;
}
bool Application::macEventFilter(EventHandlerCallRef, EventRef)
{
mainWidget->show();
return false;
}
主要.cpp:
#include <QtCore>
#include <Application.h>
#include "mainwidget.h"
int main(int argc, char *argv[]) {
Application a(argc, argv);
MainWidget mainWidget;
#ifdef Q_WS_MAC
a.setWindowIcon(QIcon(":/resource/army-officer-icon.png"));
#endif
a.setMainWidget((QWidget*)&mainWidget);
mainWidget.show();
return a.exec();
}
最佳答案
您需要重新实现 closeEvent()对于您的窗口,然后检查事件是否来自 X 按钮或其他地方。
关于c++ - Mac OS 上的 Qt - 检测停靠菜单上的点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4529358/