本页内容

变更内容Qt OpenGL

Qt 6 的变更,是出于让该框架更高效、更易于使用的有意识努力。

我们力求在每个版本中保持所有公开 API 的二进制和源代码兼容性。但为了使 Qt 成为更好的框架,某些变更在所难免。

在本主题中,我们总结了这些变更 Qt OpenGL,并提供相应的处理指南。

已移除的弃用类

Qt OpenGL 模块在 Qt 5 生命周期内已被标记为弃用,其中包含的类已在 Qt 6 中移除。

这具体指以QGL 为前缀的类。

QOpenGL 类已迁移

在 Qt 5 中,Qt GUI 中添加了一组替代的 OpenGL 支持类。这是为了支持 OpenGL 作为跨平台图形 API,该 API 构成了 Qt 图形功能的基础。

在 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 不再包含 ANGLE(一款第三方 OpenGL ES 到 Direct 3D 转换器)。这意味着Qt::AA_UseOpenGLES 以及环境变量QT_OPENGL=angle 均不再生效。在动态 OpenGL 构建中,若标准 OpenGL 初始化失败,系统将不会自动回退到 ANGLE。 对于直接使用 OpenGL 的基于QWindow 或QWidget 的应用程序(例如通过QOpenGLWidget 调用),这意味着运行时唯一可用的选项是原生 OpenGL。不过,仍可使用纯软件 OpenGL 实现,例如预编译 Qt 软件包中附带的 Mesa llvmpipe。

对于Qt Quick 和Qt Quick 3D 上的应用程序,Qt 6 除了支持 OpenGL 之外,还新增了对 Direct 3D 11、Vulkan 和 Metal 的支持。在 Windows 平台上,Qt 6 默认使用 Direct 3D,因此通过增加对其他图形 API 的支持,ANGLE 被移除带来的影响得以缓解。

© 2026 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.