2010-12-25 15 views
2

私のアプリケーションのMac OS版のシステムトレイアイコンを削除します。しかし、1つの小さな問題があります。ユーザーがメインウィンドウを閉じると、アプリケーションはバックグラウンドで実行し続け、ユーザーがドックアイコンをクリックするとメインウィンドウが再び表示されるはずです。これまでのところ私はアイコンのクリックを傍受する方法がないことを発見しました。Mac OSのQt - ドックメニューのクリックを検出する

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に:

あなたがチェックし、あなたの窓のための closeEvent()を再実装する必要が
#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(); 
    } 

答えて

0

イベントがXボタンや他の場所から来たかどうかを確認してください。

+0

私がしようとしていることは、それとは逆です。私はすでにウィンドウを隠すためにcloseEvent()を再実装しましたが、ドックアイコンをクリックするとウィンドウは可視状態に戻りません。あなたのためのメリークリスマス – Raphael

+0

新しいプログラムを代わりに起動していますか? –

+0

いいえ、私のプログラムはメインウィンドウを隠したまま実行し続けます。ドックアイコンをクリックすると、何も表示されません。 – Raphael