I’m trying to add better UI for an OpenGL-based program with Qt. Since I can modify that program it’s not hard to get the window ID. So I think embedding it into a QWidget would be a good idea. However, it doesn’t work like I expected:
After XReparentWindow is called, the OpenGL window lose its decoration, but the position didn’t change.
If I use XConfigureWindow to move it to position (0, 0) relative to parent it goes to the top-left corner of the screen, but not the QWidget.
After reparenting, a third window can cover the QWidget, but nothing can cover the OpenGL window.
X11 reported no errors during the whole operation.
It seems the parent of the OpenGL window has been set to the root window instead of my QWidget. What should I do to make it work correctly?
You can replace your current OpenGL window with a QGLWidget which provides an OpenGL context and can be placed into a Qt window directly.
I’m not sure Qt supports
XReparentWindowcalls like that. The docs don’t seem to say it does, so it’s probably a bad idea to use it. You could tryQWidget::create()instead.