【发布时间】:2011-05-30 14:02:14
【问题描述】:
我正在删除我的应用程序的 Mac OS 版本的系统托盘图标。但是有一个小问题:当用户关闭主窗口时,应用程序应该继续在后台运行,如果用户单击停靠图标,主窗口应该再次可见。到目前为止,我还没有找到拦截此图标点击的方法。
有没有办法用 Qt 来完成这个任务?如果没有,我应该如何使用原生 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;
}
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();
}
【问题讨论】:
-
嗨,Raphael,可能为时已晚,但我认为您要找的是那里的给予者:stackoverflow.com/a/15363738/7252834 致以最诚挚的问候
-
@RomainCendre 感谢您提醒我,我曾经在十多年前从事 QT 开发。这绝对感觉像是过去的爆炸,并带回了一些回忆!