用于图形的QGLWidget和用于GUI的QT

Vio*_*nev 5 opengl qt

我正在尝试实现一个自定义OpenGL场景(包装在QGLWidget中),但仍然使用QT控件(如滑动条和按钮).我试图让我的主要小部件成为QGLWidget,它有QWidgets作为孩子.子窗口小部件似乎工作(当我单击下拉菜单时,其选项出现),但窗口小部件无法绘制(我看到一个白色方块).我将我的子窗口小部件的基类从QWidget更改为QGLWidget,现在QPainter调用工作,但QT GUI的东西仍未显示...

有人声称QGLWidget不能将QWidgets作为孩子...我不确定,我不愿意放弃.顺便说一下,我使用Visualization Library来绘制OpenGL场景,但它只是一个OpenGL包装器......

问题可能出现的任何线索?此外,当我将子窗口小部件添加到GQLWidget时,由于某种原因,关键事件停止被处理.

更新: 我尝试了各种小部件和布局组合.似乎QGLWidget只是被绘制在任何东西之上.我甚至尝试使用raise()来安排小部件的Z深度,但无济于事.overlayGL()是在OpenGL小部件之上绘制的唯一方法吗?

更新2 经过数月的尝试,我发现它与QT有关.每当在另一个QGLWidget上绘制QGLWidget时,不会调用第一个的background()函数.所以一个按钮就在那里,可以点击,但它没有画出来.我的解决方法是使用QPainter自己绘制所有内容 - 这很有效.我发现很奇怪的是,必须使用QPainter :: startNativePainting()来绘制它.可以预期,只要QGLWidget是绘图设备,他们就会在QPainter中重载start()以调用startNativePainting()...

另一个(可能有用的)事实是QPainter调用CHANGE Opengl上下文.因此,如果您有另一个与QPainter合作的工具(在我的案例中是可视化库),很可能其中一个会崩溃(在我的情况下,VL会检查在每个帧之前是否已清除了上下文状态).

Mar*_*ett 2

有一个使用 opengl 渲染 Qt 小部件的实验室示例,它有点旧,我还没有尝试使用 4.8 中改进的 qglwidget

在全屏 QGLwidget 顶部绘制也存在问题 - 这可能是 NVidia 的 openGL 驱动程序中的一个错误。似乎尚未解决 https://bugreports.qt-project.org/browse/QTBUG-7556