2010-12-25 2 views
2

Mac OS 버전의 응용 프로그램에 대한 시스템 트레이 아이콘이 삭제됩니다. 그러나 하나의 작은 문제가 있습니다. 사용자가 주 창을 닫으면 응용 프로그램이 백그라운드에서 계속 실행되고 사용자가 도크 아이콘을 클릭하면 주 창이 다시 보일 것입니다. 지금까지 나는이 아이콘을 클릭하는 것을 가로 챌 수있는 방법을 찾지 못했습니다.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() reimplemented 있지만 도킹 아이콘을 클릭하면 창을 볼 수있는 상태로 반환하지 않습니다. 당신도 메리 크리스마스 – Raphael

+0

새로운 프로그램을 시작 하시겠습니까? –

+0

아니요, 내 프로그램이 숨겨진 기본 창과 함께 계속 실행됩니다. 도크 아이콘을 클릭해도 아무런 효과가 없습니다. – Raphael

관련 문제