Qt 6.0 正式发布了,支持 Ubuntu 20.04、CentOS 8.1、OpenSuSE 15.1 等主流 Linux 发行版,经测试,可在 Deepin V20 系统下运行,以下将介绍 Qt 6 新功能和主要变化。
前言
Qt 6.0 版本是 Qt 6 系列的第一个版本,旨在满足一些新的市场需求。
Qt 官方表示,自 2012 年发布 Qt 5.0 以来,Qt 的用户群体和使用量都有巨大的增长。但是八年来,世界发生了重大变化,比如嵌入式系统中 Qt 的使用量猛增,C++不断发展,出现了新的 3D 图形 API 等。这些都是直接影响 Qt 发展迭代的因素。
因此,官方称 Qt 6 的任务是使 Qt 成为未来的生产力平台。作为 Qt 的主要版本,Qt 6.0 是 Qt 5 系列的延续,提供了更高的自由度,以实现新功能。参考介绍Qt 6版本的技术看点,包括相比Qt 5的技术改进。
Qt 6 的主要变化包括以下领域:
适配 C++ 17。
采用下一代 QML。
采用新的图形架构。
Qt Quick 统一 2D 和 3D。
改用 CMake 构建系统(老项目仍支持 qmake)。
Qt 6 新功能和主要变化介绍
1、C ++ 17
在 Qt 6 中加入了一个与 C++ 17 兼容的编译器,以便在开发 Qt 时使用更现代的 C++ 语言构造,并允许在 API方面进行集成。
2、核心库和 API
作为 Qt 最核心部分的模块,Qt Core 本次更新遍历了许多领域并进行了改进,以下是一些最重要的变化:
新的属性和绑定系统:该系统现在带来了绑定的概念,这使得 QML 在 C++ 的 Qt 5 中取得了巨大的成功。
字符串和 Unicode:官方从 Qt 5 开始将 Qt 与 Unicode 完全对齐,但是 Qt 6 中还有一些问题需要整理解决。
QList 是一个在 Qt 5 中经常被批评的类,因为它是堆分配存储在其中的对象的对象,该对象大于指针,从而给堆分配方法带来压力。在 Qt 6 中对此进行了更改,并将 QList 和 QVector 统一为一个类。
QMetaType 和 QVariant 是 Qt 的元对象系统如何工作的基础。没有 QMetaType,就不可能有信号和插槽,并且动态调用需要 QVariant。这两个类在 Qt 6 中被几乎完全的重写。
Qt 的其他与图形无关的部分也发生了很大的变化。例如,Qt Concurrent 也经历了几乎完全的重写,并且现在比以往更加轻松地进行多线程应用程序的开发。Qt Network 也有许多清理和改进。
3、新的图形架构
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。
Qt 中的 OpenGL 特定类仍然存在,但现在已从 QtOpenGL 模块中的 QtGui 中移出。此外,Qt 6 还添加了一个名为 QtShaderTools 的新模块,以跨平台的方式处理这些 API 的不同着色语言。
4、Qt Quick 3D 和 Qt 3D
Qt Quick 3D 是一个相对较新的模块。它通过 3D 功能无缝扩展了 Qt Quick。
这个模块在 Qt 6 上有了重大的改进,它现在始终使用 RHI 抽象层来充分利用基础图形 API 和硬件。此外,它现在在 2D 和 3D 内容之间具有更深、更高性能的集成,使用户可以将 2D 项放置到 3D 场景中。它还大大改进了对 glTF2 和基于物理引擎的渲染支持。该模块还有许多其他重大改进。
Qt 3D 现在也基于 RHI 抽象层之上,进行了一些性能改进和清理。
5、构建系统和软件包
Qt 6 还对构建和分发 Qt 的方式进行了一些重大更改。值得一提的是,Qt 6 本身现在是使用 CMake 构建的。这也为使用 CMake 构建项目的所有用户带来了体验优化。官方将在 Qt 6 的生命周期内继续支持 qmake,因此老用户暂时无需对构建系统进行任何更改,但是官方建议所有新项目都使用 CMake。
Qt 6 还带有一个更小的默认软件包,许多附加组件现在通过软件包管理器作为单独的软件包分发。它为用户提供了更大的灵活性,开发者可以选择仅下载他们真正需要的内容。
目前,官方已经将现有的 Qt 安装程序用作软件包管理器的后端,但正在研究将来版本的替代方法。
6、支持平台
Qt 6 同样支持跨平台,支持以下操作系统:
Windows 10。
macOS 10.14 及更高版本。
Linux (Ubuntu 20.04、CentOS 8.1、OpenSuSE 15.1)。
iOS 13 或更高版本。
Android (API level 23 及更高版本)。
在嵌入式方面,Qt 6 支持各种运行 Linux 的嵌入式设备。不过对于 Qt 5 支持的嵌入式实时操作系统,Qt 6 尚未提供支持。QNX 和 INTEGRITY 近期已增加对 C++17 的支持,Qt 团队计划在发布 Qt 6.2 时增加对它们的支持。
7、兼容性
Qt 开发团队表示,在对 Qt 6 进行修改时,他们也基于未来使用场景的考虑对 API 进行了调整,同时在兼容性方面尽量减少对现有用户的破坏。
因此,如果开发者希望使用 Qt 6,需要对代码进行调整。Qt 团队也表示已尽可能简化开发者移植到新版本的工作。
在 Qt 6 中,开发团队为代码库进行了全面清理,以删除在 Qt 5 生命周期中被弃用的 API 及模块。Qt 5 中部分被删除的最常用 API 已被迁移到 Qt5CoreCompat 模块。它包含从 Qt 6 中删除的几个广泛使用的类,例如 QRegExp, QTextCodec 和用于 XML 的旧 SAX 解析器以及其他部分项目。此模块旨在帮助开发者进行迁移,除了针对 Qt 5 的回归测试和安全相关问题外,该模块不会收到 bug 修复。开发团队建议使用它进行移植,然后逐步删除对模块的依赖。
对于下一个版本的发布安排,官方计划2021年4月发布 Qt 6.1,然后在9月底发布 Qt 6 系列的首个长期支持版本 Qt 6.2 LTS。
当然,Qt 官方也花了一些时间修复了很多被开发者诟病的 BUG。
注:以上就是 Qt 6 的主要变化概述,还有更多细节的改变,包含修复各类已知的 BUG。
下载链接
相关主题