gpt4 book ai didi

c++ - Mac OS 上的 Qt - 检测停靠菜单上的点击

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:28 24 4
gpt4 key购买 nike

我正在删除我的应用程序的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com