QWindow如何取代QGLWidget?

时间:2013-08-01 00:08:43

标签: qt opengl qt5

QT文档说,从qt5开始,你应该使用QOpenGL *类而不是QGL *。

问题是没有QGLWidget替换。我想出你应该将QWindow与QOpenGLContext结合使用并调用setSurfaceType(OpenGLSurface);。

唯一的问题是QWindow不能将QWidget作为父级。那我怎么能嵌入一个QWindow aka。我的OpenGL绘图表面到其他小部件?

1 个答案:

答案 0 :(得分:15)

QT 5.1在一个奇怪的情况下是OpenGL和QWidget(和派生的)明智的。没有QGLWidget替换,但所有其他QGL类都有明确的替换。

如果您不想使用旧的QGLWidget,您确实需要自己制作QWindow的替代品。所以,首先你设置QWindow,然后在你打电话setSurfaceType( OpenGLSurface );之前正确地说出来create();。然后,您创建一个新的QOpenGLContext并使用其makeCurrent()功能并传递您的QWindow。然后,使用QWidget::createWindowContainer(window);

QWidget创建QWindow

但这只是一个暂时的黑客攻击,你不应该使用它,除非你真的想要混合QtQuick和QWidget。然后,您可以使用名为5.4.0

5.2.0 QOpenGLWidget中的实际替换来替换此临时hack