2010-12-25 2 views
2

Ich lasse das Taskleistensymbol für die Mac OS-Version meiner Anwendung fallen. Es gibt jedoch ein kleines Problem: Wenn der Benutzer das Hauptfenster schließt, sollte die Anwendung weiterhin im Hintergrund ausgeführt werden und das Hauptfenster sollte wieder sichtbar werden, wenn der Benutzer auf das Dock-Symbol klickt. Bisher habe ich keine Möglichkeit gefunden, diesen Klick auf das Icon abzufangen.Qt unter Mac OS - Erkennen eines Klicks auf das Dock-Menü

Gibt es eine Möglichkeit, dies mit Qt zu erreichen? Wenn nicht, wie sollte ich mit der nativen API fortfahren, um dieses Verhalten zu implementieren?

Ich habe versucht, eine benutzerdefinierte Anwendungsklasse zu erstellen, die QApplication implementieren, so dass ich den macEventFilter neu implementieren kann, aber die Dokumentation zu dieser Funktion ist knapp.

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:

#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(); 
    } 

Antwort

0

Sie benötigen die closeEvent() für Ihre Fenster neu zu implementieren, dann überprüfen sehen Sie, ob das Ereignis von der X-Taste oder woanders kam.

+0

Was ich versuche, ist das Gegenteil. Ich habe das closeEvent() bereits neu implementiert, um mein Fenster zu verbergen, aber wenn ich auf das Dock-Symbol klicke, kehrt das Fenster nicht in den sichtbaren Zustand zurück. Frohe Weihnachten auch für Sie – Raphael

+0

Startet es stattdessen ein neues Programm? –

+0

Nein, mein Programm läuft weiterhin mit dem ausgeblendeten Hauptfenster. Ein Klick auf das Dock-Icon tut absolut nichts. – Raphael