2014-12-16 1 views
1

Dock에서 응용 프로그램 아이콘을 한 번 클릭하면 해당 응용 프로그램이 시작되거나 응용 프로그램이 이미 열려 있으면 해당 응용 프로그램으로 전환되고 열려있는 모든 창을 앞으로 가져옵니다. 그 응용 프로그램.OS X에서 Dock 단축키를 사용하여 독으로 최소화 한 후 Qt 앱 복원

내 Qt 앱에서이 동작이 나타나지 않습니다. 도킹 바로 가기가 있는데, 도크에서 앱을 최소화하고, 최소화 된 인스턴스를 클릭하면 앱이 복원됩니다.

Dock (도킹 바로 가기)에서 응용 프로그램 아이콘을 클릭해도 아무런 변화가 없습니다.

은 (내가 마우스 오른쪽 단추로 클릭하고 "모두 표시 윈도우"-하지만 다른 모든 응용 프로그램의 동작과 유사하지 않다) 나는이 대답에서 코드를 삽입하려고

: https://stackoverflow.com/a/15363738/1217150

qDebug 문, 생성자에서

if(test) qDebug("registered"); 

void MyApplictionClass::onClickOnDock() 
{ 
    qDebug("dock clicked"); 
} 
배치

시작시 두 메시지를 모두받습니다.하지만 최소화 한 후 또는 시작한 후 언제든지 클릭하거나 두 번 클릭하여 바로 가기를 도킹 할 수 없습니다.

전체 코드 삽입 :

MyApplicationClass.h :

#include <objc/objc.h>  
#include <objc/message.h> 
class MyApplicationClass: public QApplication 
{ 
    .... 
    bool dockClickHandler(id self, SEL _cmd, ...); 
    void onClickOnDock(); 
}; 

MyApplicationClass.cpp :

MyApplicationClass::MyApplicationClass() 
{ 
.... 
    objc_object* cls = objc_getClass("NSApplication"); 
    SEL sharedApplication = sel_registerName("sharedApplication"); 
    objc_object* appInst = objc_msgSend(cls, sharedApplication); 
    if(appInst != NULL) 
    { 
     objc_object* delegate = objc_msgSend(appInst, sel_registerName("delegate")); 
     objc_object* delClass = objc_msgSend(delegate, sel_registerName("class")); 
     const char* tst = class_getName(delClass->isa); 
     bool test = class_addMethod((objc_class*)delClass, 
            sel_registerName("applicationShouldHandleReopen::hasVisibleWindows:"), 
            (IMP)dockClickHandler(appInst, sharedApplication), "[email protected]:"); 
     if(!test) qDebug("not registered"); 
     else qDebug("registered"); 
    } 
..... 
} 

bool MyApplicationClass::dockClickHandler(id self, SEL _cmd, ...) 
{ 
    Q_UNUSED(self) 
    Q_UNUSED(_cmd) 
    onClickOnDock(); 
    return true; 
} 

void MyApplicationClass::onClickOnDock() 
{ 
    qDebug("dock clicked"); 
} 

은 아마도 내가 뭔가 잘못을 했습니까? 내가 이해할 수없는 몇 가지 항목이 있습니다 ... 참조 된 게시물은 클래스의 일부가 아닌 dockClickHandler을 가졌습니다 ... 나는 그들이 그것을 가지고있는 곳을 모르겠습니다 ... 그리고 제가 그것을 등록했을 때 논쟁을해야했습니다 그렇지 않으면 빌드를 거부합니다. 그래도 뭔가하는 것처럼 보입니다 ... 옳은 일이 아닙니다. 이 코드에서는 앱이 도킹 클릭에 반응하는 위치를 알 수 없습니다.

올바른 방법입니까? 또는 도킹 바로 가기가 클릭되었을 때 어떻게 복원 할 수 있습니까?

(OSX 10.6-10.9, Qt는 4.8 것은)

답변

관련 문제