QT文档说,从qt5开始,您应该使用QOpenGL *类而不是QGL *。
问题是没有QGLWidget替代品。我发现应该将QWindow与QOpenGLContext结合使用,并应调用setSurfaceType(OpenGLSurface);。
唯一的问题是QWindow不能将QWidget作为父级。所以我怎么能嵌入QWindow呢。我的OpenGL将表面绘制到其他小部件中?
最佳答案
QT 5.1在OpenGL和QWidget
(并派生)方面很奇怪。没有QGLWidget
替代品,但所有其他QGL类都有明确的替代品。
如果您不想使用旧的QGLWidget
,则确实必须用QWindow
替代。因此,首先,您要设置QWindow
,然后,如您所说正确地调用setSurfaceType( OpenGLSurface );
,然后再调用create();
。然后,创建一个新的QOpenGLContext
并使用其makeCurrent()
函数并传递您的QWindow
。然后使用QWidget
从QWindow
创建QWidget::createWindowContainer(window);
但这只是一个临时性的技巧,除非您确实想将QtQuick与QWidget混合使用,否则不必使用。然后,您可以用5.2.0 5.4.0中称为QOpenGLWidget的实际替换方法来替换此临时hack。