我正在删除应用程序的Mac OS版本的系统托盘图标。但是有一个小问题:当用户关闭主窗口时,应用程序应该继续在后台运行,如果用户单击停靠图标,主窗口将再次可见。到目前为止,我发现没有办法拦截图标上的这个点击。
有没有办法用Qt实现这个目标?如果没有,我应该如何继续使用本机API来实现此行为?
我尝试创建一个实现QApplication的自定义应用程序类,以便我可以重新实现macEventFilter,但是关于此函数的文档很少。
application.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
application.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;
}
main.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();
}