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。然后使用QWidgetQWindow创建QWidget::createWindowContainer(window);

但这只是一个临时性的技巧,除非您确实想将QtQuick与QWidget混合使用,否则不必使用。然后,您可以用5.2.0 5.4.0中称为QOpenGLWidget的实际替换方法来替换此临时hack。

08-16 00:04