Qt 6 正式发布
喜欢就关注我们吧!
文|大东
Qt 6.0 正式发布了。该版本是 Qt 6 系列的第一个版本,旨在满足一些新的市场需求。
官方表示,自 2012 年发布 Qt 5.0 以来,Qt 的用户群体和使用量都有巨大的增长。但是八年来,世界发生了重大变化,比如嵌入式系统中 Qt 的使用量猛增,C++不断发展,出现了新的 3D 图形 API 等。这些都是直接影响 Qt 发展迭代的因素。
因此,官方称 Qt 6 的任务是使 Qt 成为未来的生产力平台。作为 Qt 的主要版本,Qt 6.0 是 Qt 5 系列的延续,提供了更高的自由度,以实现新功能。Qt 6 的主要变化包括这些领域:
适配 C++ 17
采用下一代 QML
采用新的图形架构
Qt Quick 统一 2D 和 3D
改用 CMake 构建系统(老项目仍支持 qmake)
在 Qt 6 中加入了一个与 C++ 17 兼容的编译器,以便在开发 Qt 时使用更现代的 C++ 语言构造,并允许在 API方面进行集成。
核心库和 API作为 Qt 最核心部分的模块,Qt Core 本次更新遍历了许多领域并进行了改进,以下是一些最重要的变化:
新的属性和绑定系统:该系统现在带来了绑定的概念,这使得 QML 在 C++ 的 Qt 5 中取得了巨大的成功。
字符串和 Unicode:官方从 Qt 5 开始将 Qt 与 Unicode 完全对齐,但是 Qt 6 中还有一些问题需要整理解决。更多详细信息将在稍后的单独博客中发布。
QList 是一个在 Qt 5 中经常被批评的类,因为它是堆分配存储在其中的对象的对象,该对象大于指针,从而给堆分配方法带来压力。在 Qt 6 中对此进行了更改,并将 QList 和 QVector 统一为一个类。有关详细信息,请参见 Qt 6 中有关 QList 的博客文章。
QMetaType 和 QVariant 是 Qt 的元对象系统如何工作的基础。没有 QMetaType,就不可能有信号和插槽,并且动态调用需要 QVariant。这两个类在 Qt 6 中被几乎完全的重写,可以在此处阅读有关详细信息。
Qt 的其他与图形无关的部分也发生了很大的变化。例如,Qt Concurrent 也经历了几乎完全的重写,并且现在比以往更加轻松地进行多线程应用程序的开发。Qt Network 也有许多清理和改进。有关详细信息,请参见此博客文章。
新的图形架构Qt 5 的图形体系结构非常依赖 OpenGL 作为底层 3D 图形 API。但过去 8 年来随着 Metal 和 Vulkan 的推出,市场发生了巨大变化。现在,Qt 6 加入了大量不同平台的图形 API,以确保用户可以在所有平台上以最高性能运行 Qt。
在 Qt Quick 中的所有 3D 图形现在都基于称为 RHI(渲染硬件接口)的 3D 图形新抽象层之上。RHI 使 Qt 可以使用基础 OS /平台的本机 3D 图形 API。因此,默认情况下,Qt Quick 现在将在 Windows 上使用Direct3D,在 macOS 上使用 Metal。有关详细信息,请参阅有关 RHI 的博客文章系列。
Qt 中的 OpenGL 特定类仍然存在,但现在已从 QtOpenGL 模块中的 QtGui 中移出。此外,Qt 6 还添加了一个名为 QtShaderTools 的新模块,以跨平台的方式处理这些 API 的不同着色语言。
Qt Quick 3D 和 Qt 3DQt Quick 3D 是一个相对较新的模块。它通过 3D 功能无缝扩展了 Qt Quick。
这个模块在 Qt 6 上有了重大的改进,它现在始终使用 RHI 抽象层来充分利用基础图形 API 和硬件。此外,它现在在 2D 和 3D 内容之间具有更深、更高性能的集成,使用户可以将 2D 项放置到 3D 场景中。它还大大改进了对 glTF2 和基于物理引擎的渲染支持。该模块还有许多其他重大改进,有关详细说明,请参见单独的博客文章。<阅读原文查看>
Qt 3D 现在也基于 RHI 抽象层之上,进行了一些性能改进和清理。
构建系统和软件包Qt 6 还对构建和分发 Qt 的方式进行了一些重大更改。值得一提的是,Qt 6 本身现在是使用 CMake 构建的。这也为使用 CMake 构建项目的所有用户带来了体验优化。官方将在 Qt 6 的生命周期内继续支持 qmake,因此老用户暂时无需对构建系统进行任何更改,但是官方建议所有新项目都使用 CMake。
Qt 6 还带有一个更小的默认软件包,许多附加组件现在通过软件包管理器作为单独的软件包分发。它为用户提供了更大的灵活性,开发者可以选择仅下载他们真正需要的内容。
目前,官方已经将现有的 Qt 安装程序用作软件包管理器的后端,但正在研究将来版本的替代方法。有关更多详细信息,请参见此处的博客文章。
当然,官方也花了一些时间修复了很多被开发者诟病的 BUG。更新详情请查看 Qt 6 的 Wiki 页面。
2020-12-08
2020-12-08
2020-12-06