2012-04-10 3 views
8

XLib를 사용하여 생성 된 윈도우에 두 개의 QWidgets를 삽입하고 싶습니다. 이 코드를 작성했습니다 :X11 윈도우에 QWidget 포함하기

// Assume all the necessary headers included 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    // Create widget 1 
    QWidget widget1 ; 
    widget1.setGeometry(44,44,666,666); 
    widget1.show(); 

    // Create widget 2 
    QWidget widget2 ; 
    widget2.setGeometry(144,144,666,666); 
    widget2.show();  

    Display *display = XOpenDisplay(0); // 0 parameter for default values 

    if (display != NULL) 
    { 
     // Create the x11 window using XLib 
     Window w = XCreateWindow(display, DefaultRootWindow(display), 
     0, 0, 1200, 1100, 0,CopyFromParent, CopyFromParent, CopyFromParent, 0, 0); 

     XMapWindow(display, w); 
     XFlush(display); 

     XReparentWindow(display, widget1.winId(), w, 0, 0); 
     XReparentWindow(display, widget2.winId(), w, 1, 10); 
    } 

    else 
     std::cout << "Error: Opening display" << std::endl ; 

     return app.exec(); 
} 

이 프로그램을 성공적으로 실행할 수는 있지만 위젯은 내가 만든 X11 창에 임베드되지 않습니다. 세 가지가 모두 만들어 지지만 독립적입니다. 이 위젯은 창에 임베드되지 않습니다.

+0

첵이 아웃 : QX11EmbedWidget – HeyYO

+0

[QX11EmbedWidget] (http://qt-project.org/doc/qt-4.8/qx11embedwidget.html) –

+0

나는 동일한 작업을 수행하는 데 사용 QX11 용기가 있었다. 하지만 XLib을 사용하여 특별히 만든 창을 사용하여이를 수행해야합니다. 따라서 질문이 필요합니다. –

답변

5

위젯의 winId가 XReparentWindow에 전달 될 수있는 항목으로 설정되도록 위젯을 표시하는 순서를 생각해야 할 필요가 있음을 나타냅니다. 대체 솔루션으로

http://www.qtforum.org/article/16529/xreparent-external-x11-application.html

+0

내가 무엇을하고 있는지 묻는 것은 이미 내가하고있는 일이라고 생각한다. 어쨌든 나는 다시 부모가 된 후에 2 위젯에 대해 show()를 호출하여 다른 방법으로 시도했지만 효과가 없었다. –

+0

글쎄, 플러시 및 X11 창 실제로 표시하기 전에 재 양육을 재정렬 :-) 많이 고마워. 그리고 현상금이 있습니다. –

+0

@AmitTomar : 전체 작동 예제를 제공해 주시겠습니까? 그것은 나를 위해 작동하지 않습니다. – theV0ID

2

, 당신은이 QX11EmbedContainer을하는 등의 Xlib를 응용 프로그램에서 Qt는 응용 프로그램과 XEmbed의 프로토콜에 QX11EmbedWidget 대신는 QWidget을 사용하기 위해 할 수있는. 이 솔루션에는 장점이 있습니다. 서로 다른 프로세스에서 다른 창을 실현할 수 있습니다.

+0

비록 Qt4에서만 작동하며 Qt5에서는 작동하지 않습니다. 맞습니까? 그렇지 않으면 설명하십시오. – theV0ID

+0

@ theV0ID Qt5에 대한 http://doc.qt.io/qt-5/qwidget.html#createWindowContainer를 참조하십시오. – Milovidov