18

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

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

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

4

1 回答 1

15

QWidgetQT 5.1 在 OpenGL 和(和派生的)明智的情况下处于一种奇怪的情况。没有QGLWidget替代品,但所有其他 QGL 类都有明确的替代品。

如果您不想使用旧的QGLWidget,您确实必须自己制造一个替代品QWindow。所以,首先你设置你的QWindowthen,正如你setSurfaceType( OpenGLSurface );在调用它之前正确所说的那样create();。然后你创建一个新的QOpenGLContext并使用它的makeCurrent()功能并传递你的QWindow. QWidget然后你从QWindowusing创建一个QWidget::createWindowContainer(window);

但这只是一个临时的 hack,除非你真的想混合 QtQuick 和 QWidget,否则你不应该使用它。然后,您可以用5.2.0 5.4.0中称为QOpenGLWidget的实际替换来替换这个临时 hack

于 2013-08-01T17:34:35.060 回答