我正在尝试使用Qt为基于OpenGL的程序添加更好的UI。由于我可以修改该程序,因此获取窗口ID并不困难。所以我认为将它嵌入到QWidget中是个好主意。但是,它不像我预期的那样工作:
调用XReparentWindow
后,OpenGL窗口会失去其装饰,但位置没有改变。
如果我使用XConfigureWindow
将其移动到相对于父级的位置(0, 0)
,则会转到屏幕的左上角,而不是QWidget。
重新渲染后,第三个窗口可以覆盖QWidget,但没有任何东西可以覆盖OpenGL窗口。
X11报告整个操作过程中没有错误。
似乎OpenGL窗口的父级已设置为根窗口而不是我的QWidget。我该怎么做才能使它正常工作?
答案 0 :(得分:1)
您可以使用提供OpenGL上下文的QGLWidget替换当前的OpenGL窗口,并可以直接放入Qt窗口。
我不确定Qt会支持XReparentWindow
这样的电话。文档似乎没有说它,所以使用它可能是一个坏主意。您可以尝试使用QWidget::create()
。