2013-05-27 6 views
3

Qt 응용 프로그램의 QWidget 창을 항상 현재 데스크탑/작업 공간에 두는 방법을 검색합니다. 가상 데스크톱을 변경할 때 새로운 현재 가상 데스크톱에 내 창이 자동으로 표시되어야합니다.linux 및 mac의 현재 데스크탑에 항상 응용 프로그램 창을 유지하십시오.

적어도 gnome, kde 및 Linux OS에서 작동하는 솔루션을 검색합니다.

제가 생각하기에 첫 번째 단계는 가상 데스크톱이 변경 될 때를 감지하는 것입니다. Qt에 API가 있거나 각 데스크톱 솔루션을 구현해야하는지 여부는 알 수 없습니다.

미리 도움을 청하십시오.

+1

응용 프로그램에서 데스크톱을 가로 질러 나를 쫓기 시작하면이 작업이 매우 성가 시게 될 수 있으므로 좋은 이유가 있기를 바랍니다. 내가 가상 데스크탑을 사용하는 가장 큰 이유는 각기 다른 "윈도우"를 갖는 것입니다. – Viv

+0

실제 작업을 기억하는 작은 투명한 위젯으로, 실제 작업 (예 : 동반자)을 잊지 않고 항상 볼 수 있어야합니다. –

답변

2

Jan Kundrát에게 감사드립니다 (이전 댓글 https://stackoverflow.com/a/16777496/1045832). 리눅스 X11을위한

솔루션 :

#include <objc/objc-runtime.h> 

WId windowObject = this->winId(); 
objc_object * nsviewObject = reinterpret_cast<objc_object *>(windowObject); 
objc_object * nsWindowObject = objc_msgSend(nsviewObject, sel_registerName("window")); 
int NSWindowCollectionBehaviorCanJoinAllSpaces = 1 << 0; 
objc_msgSend(nsWindowObject, sel_registerName("setCollectionBehavior:"), NSWindowCollectionBehaviorCanJoinAllSpaces); 

이 .PRO

에 넣어 :

#ifdef Q_WS_X11 //only define on Qt 4.X 
#include <QX11Info> //Only on Qt 4.X , return expected in Qt 5.1 
#include <X11/Xlib.h> 
#include <X11/Xatom.h> 
#endif 

YourWidget::YourWidget(QWidget *parent) : 
    QWidget(parent), 
    ui(new Ui::YourWidget) 
{ 

#ifdef Q_WS_X11 //only define on Qt 4.X 
    unsigned long data = 0xFFFFFFFF; 
    XChangeProperty (QX11Info::display(), 
        winId(), 
        XInternAtom(QX11Info::display(), "_NET_WM_DESKTOP", False), 
        XA_CARDINAL, 
        32, 
        PropModeReplace, 
        reinterpret_cast<unsigned char *>(&data), // all desktop 
        1); 
#endif 
} 

는 X 맥 OS에 대한 .PRO

unix:!macx { 
    LIBS += -lX11 
} 

솔루션에 넣어

macx { 
    LIBS += -lobjc 
} 
+0

'data'는 QWidget의 private 멤버이며 서브 클래스에서 액세스 할 수 없습니다. –

4

X11에서는 set the _NET_WM_DESKTOP window property to 0xFFFFFFFF으로되어 있습니다. 나는 거기에 Qt API가 없다고 의심하므로 #ifdef으로 X11을 검사하고 적절한 X 함수를 호출해야한다. (어떤 코드인지 모르겠다.)

+1

도움을 주신 데 감사드립니다. 나는 XChangeProperty (X11/Xlib.h)를 사용하여 X11 데이터에 액세스 할 수 있도록 Qt4.8 및 QT5.1에있는 Windows 등록 정보 및 QX11Info를 설정하려고합니다. 내가 끝나면 나는 해결책을 게시 할 것이다. –