Qt QWindow如何取代QGLWidget?

Qt QWindow如何取代QGLWidget?,qt,opengl,qt5,Qt,Opengl,Qt5,QT文档说,由于qt5,您应该使用QOpenGL*类而不是QGL* 问题是没有QGLWidget替换。我发现应该将QWindow与QOpenGLContext结合使用,并调用setSurfaceType(OpenGLSurface) 唯一的问题是QWindow不能将QWidget作为父项。那么我如何嵌入一个QAKA窗口呢。我的OpenGL绘图界面进入其他小部件?Qt5.1在OpenGL和QWidget(和派生)方面处于一种奇怪的状态。没有QGLWidget替换,但所有其他QGL类都有明确的替换

QT文档说,由于qt5,您应该使用QOpenGL*类而不是QGL*

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


唯一的问题是QWindow不能将QWidget作为父项。那么我如何嵌入一个QAKA窗口呢。我的OpenGL绘图界面进入其他小部件?

Qt5.1在OpenGL和
QWidget
(和派生)方面处于一种奇怪的状态。没有
QGLWidget
替换,但所有其他QGL类都有明确的替换

如果您不想使用旧的
QGLWidget
,您确实需要用
QWindow
为自己制造一个替代品。因此,首先设置
QWindow
,然后正确地说,调用
setSurfaceType(OpenGLSurface)在调用
create()之前在上面。然后创建一个新的
QOpenGLContext
,并使用其
makeCurrent()
函数传递
QWindow
。然后从
QWindow
使用创建
QWidget


但这只是一个临时的破解,除非你真的想混合qquick和QWidget,否则你不应该使用它。然后,您可以用5.2.0中的实际替换来替换这个临时黑客,名为

,我将引用我的另一个评论:它基本上如中所述。对于其他内容,您只需阅读相关类的文档。我会使用一个QWindow,在create()之前调用setSurfaceType(QSurface::OpenGLSurface),然后创建一个新的QOpenGLContext,并使用它的makeCurrent()函数将QWindow传递给它。要获得更简单的解决方案,请等待。此外,阅读,看看这个反对意见可能是一个小版本太快了。@Bart我不只是想发布一些链接并将其作为答案,但我将从帖子中复制一些代码片段并做出回答。不幸的是,他们没有添加带有5.2--@Alexander初步支持(未记录)的OpenGLWidget将在5.3中发布,实际版本将在5.4中发布,正如您看到和看到的,目前正在进行中。(我发布的链接将保持不变,因此如果您以后阅读本文,它们可能不会反映进度状况)+1,谢谢。你那里有所有的信息,我认为对我来说基本上是一样的是没有意义的。在我尝试移植的代码中,有事件被覆盖,以及绘制、更新方法等。我想移植这种行为没有简单的方法?@Alexander如果你想最小化工作量,我建议你等到5.2.0。如果您现在很想这样做,请看docsI中的示例。但我必须在10月之前将项目移植到OS X。QOpenGLWidget是否在Qt5.2中实际实现?您与QOpenGLWidget票证的链接表明该票证仍未解决。如果是这样的话,你的最后一段可能会产生误导。