有人声称QGLWidget不能有QWidget作为子项...我不确定这一点,也不想放弃。顺便说一句,我正在使用可视化库来绘制OpenGL场景,但它只是一个OpenGL包装器...
问题可能出在哪里?此外,当我向GQLWidget添加子窗口小部件时,键事件停止被处理,原因不明。
更新: 我尝试了各种小部件和布局的组合。看起来QGLWidget只是在顶部绘制任何内容。我甚至尝试过raise()来排列小部件的Z深度,但没有效果。overlayGL()是在OpenGL小部件上方绘制的唯一方法吗?
更新2: 经过数月的尝试,我发现它与QT有关。每当一个QGLWidget在另一个QGLWidget上方绘制时,第一个的background()函数不会被调用。因此,按钮在那里可以被单击,但没有被绘制。我的解决方法是使用QPainter自己绘制所有内容-这很有效。我发现有趣的是,人们必须使用QPainter::startNativePainting()才能进行绘制。人们期望他们会在QPainter中重载start(),以便在QGLWidget成为绘图设备时调用startNativePainting()...
另一个(可能有用的)事实是,QPainter调用更改了Opengl上下文。因此,如果您有与QPainter合作的另一个工具(在我的情况下是可视化库),则其中一个将崩溃(在我的情况下,VL检查每个帧之前是否清除了上下文状态)。