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

标签 c++ qt macos

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

相关文章:

c++ - 如何在调试字符串的函数中获取函数名称?

macos - 如何在 Mac 上完整(具有所有功能 - ACL 支持/Xattr 支持/xxhash 库/zstd 库)安装(编译)rsync v3.2.3?

linux - 如何在 Unix 控制台或 Mac 终端上运行 shell 脚本?

指向模板化静态成员函数的指针的 C++11 vector

c++ - invoke_result with member (operator[]) 函数

python - qml 文件无法调用 pyd 文件的函数

swift - NSAppleEventManager.shared().setEventHandler 窃取焦点

c++ - 如何添加对 Boost.Proto 表达式的父引用?

c++ - 十进制文字大于 LONG_LONG_MAX

c - 我是否被迫使用 pthread_cond_broadcast(通过 pthread_cond_signal)以保证 *my* 线程被唤醒?