从QGLWidget移动到QWindow

时间:2014-02-11 13:43:31

标签: c++ qt opengl qt4 qt5

我有一些使用Qt 4的代码。我想将它迁移到Qt 5并切换到QOpenGL的东西。我无法理解来自void paintGL()void initializeGL()的代码需要在QWindow中的哪个位置。任何人都可以帮我一个例子吗?

3 个答案:

答案 0 :(得分:1)

我创建了一个使用QWindow和OpenGL的简单示例。

为简化OpenGL开发,我创建了一个抽象类GLWindow,它包含虚函数initializeGL()paintGL()resizeGL(int w, int h)。我相信源代码显示了旧样式和新样式之间的关系。

这个例子可以在这里找到:

https://github.com/mortennobel/QtOpenGLChapter/tree/master/OpenGL3xAlt

答案 1 :(得分:0)

Qt在OpenGL场景中放置了小部件at least one example (Overpainting)。通过查看,看起来最简单的方法是从QGLWidget而不是QWidget继承并覆盖适当的虚函数以进行初始化和绘制。

答案 2 :(得分:0)

在Qtbase / examples / opengl中使用QWindow和OpenGL的标准示例是hellowindow

没有直接替换initializeGL和paintGL。相反,你做这样的事情:

  • 使用表面类型为OpenGLSurface的QWindow。
  • 创建一个匹配格式的QOpenGLContext。
  • 当窗口收到公开事件时,开始渲染(makeCurrent,你的GL调用,最后是swapBuffers)。