从QGLWidget转移到QWindow

Moving from QGLWidget to QWindow

本文关键字:QWindow 转移 QGLWidget      更新时间:2023-10-16

我有一些使用 Qt 4 的代码。我想将其迁移到Qt 5并切换到QOpenGL的东西。我不明白 void paintGL()void initializeGL() 的代码需要在 QWindow 中去哪里。谁能帮我举个例子?

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

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

此处提供了该示例:

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

Qt至少有一个将小部件放在OpenGL场景上的例子(Overpainting)。 通过查看这一点,似乎最简单的方法是从QGLWidget继承而不是QWidget并覆盖用于初始化和绘制的相应虚函数。

将 QWindow 与 OpenGL 一起使用的标准示例是 qtbase/examples/opengl 中的 hellowindow。

初始化GL和paintGL没有直接的替代品。相反,您可以执行以下操作:

  • 有一个表面类型为OpenGLSurface的QWindow。
  • 创建具有匹配格式的 QOpenGLContext。
  • 当窗口收到公开事件时,开始渲染(makeCurrent,您的GL调用,最后交换缓冲区)。