对Qt OpenGL
Qt 6 是我们努力使框架更高效、更易用的结果。
我们努力在每个版本中保持所有公共 API 的二进制和源代码兼容性。但为了使 Qt 成为一个更好的框架,有些改动是不可避免的。
在本主题中,我们总结了 Qt OpenGL中的变化,并提供处理这些变化的指导。
删除过时的类
模块 Qt OpenGL模块在 Qt 5 中被弃用,它所包含的类已在 Qt 6 中移除。
这特别是指以QGL
为前缀的类。
迁移 QOpenGL 类
在 Qt 5 中,一组支持 OpenGL 的替换类被添加到 Qt GUI 中。这是为了支持作为 Qt 图形基础的跨平台图形 API OpenGL。
在 Qt 6 中,这些类已迁移到 Qt OpenGL模块。对于直接依赖 OpenGL 的应用程序来说,它们仍然可用并完全受支持。不过,由于 Qt 已扩展到支持其他图形 API,如 Direct3D、Metal 和 Vulkan,它们不再被视为基础。
现有的应用程序代码在很大程度上将继续工作,但现在应在项目文件中包含 Qt OpenGL以及头文件(如果这些头文件之前是通过 Qt GUI 间接包含的)。
注: 一个值得注意的例外是QOpenGLContext ,它仍驻留在 Qt GUI 中。
QOpenGLWidgets 类
另一个例外是QOpenGLWidget 类。该类已移至一个名为 Qt OpenGL Widgets
的新模块中,因此应将其包含在内。
为 RHI 选择 OpenGL 后端
除了调整项目文件和包含头文件外,应用程序还应手动将渲染后端设置为 OpenGL,以便在使用Qt Quick 时使用该功能。默认情况下,Qt 将使用目标平台上最合适的图形 API。更多详情,请参阅RHI 渲染文档。
删除 ANGLE
在 Windows 上,Qt 6 中不再包含第三方 OpenGL ES 到 Direct 3D 的翻译器 ANGLE。这意味着Qt::AA_UseOpenGLES
和环境变量QT_OPENGL=angle
不再有任何作用。在动态 OpenGL 构建中,如果 OpenGL-proper 无法初始化,则不会自动回退到 ANGLE。对于直接使用 OpenGL 的QWindow 或QWidget 应用程序,例如通过QOpenGLWidget ,这意味着 OpenGL-proper 是运行时的唯一选择。不过,使用纯软件 OpenGL 实现(如随预置 Qt 软件包一起提供的 Mesa llvmpipe)仍然是可行的。
对于Qt Quick 和Qt Quick 3D 应用程序,除 OpenGL 外,Qt 6 还引入了对 Direct 3D 11、Vulkan 和 Metal 的支持。在 Windows 上,Qt 6 默认使用 Direct 3D,因此,由于增加了对其他 Graphical API 的支持,取消 ANGLE 的影响会减小。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.