QT 文档说,从 qt5 开始,您应该使用 QOpenGL* 类而不是 QGL*。
问题是没有 QGLWidget 替换。我发现您应该将 QWindow 与 QOpenGLContext 结合使用并调用 setSurfaceType( OpenGLSurface );。
唯一的问题是 QWindow 不能有 QWidget 作为父级。那么我怎样才能嵌入一个 QWindow aka。我的 OpenGL 绘图表面到其他小部件?
QWidget
QT 5.1 在 OpenGL 和(和派生的)明智的情况下处于一种奇怪的情况。没有QGLWidget
替代品,但所有其他 QGL 类都有明确的替代品。
如果您不想使用旧的QGLWidget
,您确实必须自己制造一个替代品QWindow
。所以,首先你设置你的QWindow
then,正如你setSurfaceType( OpenGLSurface );
在调用它之前正确所说的那样create();
。然后你创建一个新的QOpenGLContext
并使用它的makeCurrent()
功能并传递你的QWindow
. QWidget
然后你从QWindow
using创建一个QWidget::createWindowContainer(window);
但这只是一个临时的 hack,除非你真的想混合 QtQuick 和 QWidget,否则你不应该使用它。然后,您可以用5.2.0 5.4.0中称为QOpenGLWidget的实际替换来替换这个临时 hack