【问题标题】:Qt on Mac OS - Detecting a click on the dock menuMac OS 上的 Qt - 检测停靠菜单上的点击
【发布时间】: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 开发。这绝对感觉像是过去的爆炸,并带回了一些回忆!

标签: c++ qt macos


【解决方案1】:

您需要为您的窗口重新实现 closeEvent(),然后检查事件是来自 X 按钮还是其他地方。

【讨论】:

  • 我想做的恰恰相反。我已经重新实现了 closeEvent() 来隐藏我的窗口,但是当我单击停靠图标时,窗口不会返回到它的可见状态。也祝你圣诞快乐
  • 它是在启动一个新程序吗?
  • 不,我的程序在隐藏主窗口的情况下继续运行。单击停靠图标完全没有任何作用。
猜你喜欢
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
相关资源
最近更新 更多