将 QWidget 嵌入 X11 窗口 [英] Embedding QWidget into X11 Window

查看:53
本文介绍了将 QWidget 嵌入 X11 窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将两个 QWidget 嵌入到使用 XLib 创建的窗口中.我写了这段代码:

I want to embed two QWidgets into a window created using XLib. I have written this code:

// 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 窗口中.这三样东西都在被创造,但都是独立的.这些小部件没有嵌入到窗口中.

I am able to run this program successfully but these widgets are not getting embedded into the X11 window I created. All three things are getting created, but independently. These widgets are not getting embedded into the window.

推荐答案

以下说明可能您需要考虑显示小部件的顺序,以便将小部件的 winId 设置为可以传递给XReparentWindow .

the following would indicate that perhaps you need to think about the order of displaying the widgets so that the winId for your widgets gets set to something that can be passed to XReparentWindow .

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

这篇关于将 QWidget 嵌入 X11 窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆