【问题标题】:Moving from QGLWidget to QWindow从 QGLWidget 迁移到 QWindow
【发布时间】:2014-02-11 13:43:31
【问题描述】:

我有一些使用 Qt 4 的代码。我想将它迁移到 Qt 5 并切换到 QOpenGL 的东西。我无法理解来自void paintGL()void initializeGL() 的代码需要放在QWindow 中的什么位置。谁能帮我举个例子?

【问题讨论】:

    标签: c++ qt opengl qt4 qt5


    【解决方案1】:

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

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

    示例可在此处获得:

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

    【讨论】:

    • 这就是我要找的。谢谢!
    【解决方案2】:

    Qt 有at least one example (Overpainting) 可以将小部件放在 OpenGL 场景上。通过观察,似乎最简单的方法是从 QGLWidget 继承而不是 QWidget 并覆盖适当的虚函数以进行初始化和绘制。

    【讨论】:

      【解决方案3】:

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

      initializeGL 和paintGL 没有直接的替代品。相反,您可以这样做:

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

      【讨论】:

        猜你喜欢
        • 2013-08-01
        • 1970-01-01
        • 2012-12-04
        • 2011-04-26
        • 2015-07-23
        • 2020-05-31
        • 2010-10-26
        • 2022-01-14
        • 2016-09-27
        相关资源
        最近更新 更多