2012-04-10 15 views
8

XLibを使って作成したウィンドウに2つの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ウィンドウに埋め込まれていません。 3つすべてが作成されていますが、独立しています。これらのウィジェットはウィンドウに埋め込まれていません。

+0

Chek this out: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

あなたが私にして欲しいのは、私がすでにやっていることだと思いますか?とにかく私はもう一度やり直してみましたが、もう一度やり直してみました。 –

+0

さて、フラッシングしてX11ウィンドウを表示する前に、再育児を並べ替えることは実際にはうまくいきました:-)ありがとうございました。そして、恩恵を受けます。 –

+0

@AmitTomar:実用的な例を提供してもらえますか?それは私にとってはうまくいかない。 – theV0ID

2

、あなたができるように、このQX11EmbedContainerをやって、XlibのアプリケーションでQtアプリケーションとXEmbedプロトコルで代わりのQWidgetをQX11EmbedWidgetを使用します。 このソリューションにはプラスがあります。異なるプロセスで異なるウィンドウを実現できます。

+0

これはQt4でのみ動作しますが、Qt5では動作しません。それ以外は説明してください。 – theV0ID

+0

@ theV0ID Qt5のhttp://doc.qt.io/qt-5/qwidget.html#createWindowContainerを参照してください。 – Milovidov

関連する問題