Qt 6 正式发布

来源: OSCHINA
编辑: 大东BE
2020-12-09

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)

C ++ 17

 

Qt 6中的C ++ 17

 

在 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 6中的新图形架构

 

在 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 3D

Qt 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 安装程序用作软件包管理器的后端,但正在研究将来版本的替代方法。有关更多详细信息,请参见此处的博客文章。

支持平台

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 时增加对它们的支持。

兼容性

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 修复。开发团队建议使用它进行移植,然后逐步删除对模块的依赖。

对于下一个版本的发布安排,官方计划明年4月发布 Qt 6.1,然后在9月底发布 Qt 6 系列的首个长期支持版本 Qt 6.2 LTS。

当然,官方也花了一些时间修复了很多被开发者诟病的 BUG。更新详情请查看 Qt 6 的 Wiki 页面

延伸阅读:

展开阅读全文
15 收藏
分享
加载中
精彩评论
按照惯例,应该修复3000左右bug,并新增3000左右bug
2020-12-09 13:06
18
举报
没有离线安装包,差评,真不知道官方怎么想的
2020-12-09 14:41
8
举报
这货比MFC强太多
2020-12-09 10:13
7
举报
喜欢Qt和C++,会在更多的项目中使用Qt的!
2020-12-09 09:58
7
举报
或许C++或Qt有很多缺点,即便工作中不怎么用,但学习时还是有挺多收获,Qt的有些API设计还是挺有学习价值的
2020-12-09 10:31
6
举报
最新评论 (34)
支持win7吗
2020-12-17 10:04
0
回复
举报
改进很多,越来越好了。
2020-12-17 08:46
1
回复
举报
Qt自己开发了一个C++编译器?牛叉啊
2020-12-11 05:42
0
回复
举报
没有,只是编译过程管理的工具,可以这样理解吧!qmake,cmake,nmake,automake这些多少定义怎么调度预处理,编译等这些工具而已
2020-12-17 08:53
0
回复
举报
菜鸟:bug改不完怎么办
老鸟:更新一个大版本 不再接收旧版本的bug
2020-12-10 14:56
2
回复
举报
从Qt4一直把玩到Qt6,希望Qt6能稳住特性,追求稳定少bug,优化和增加更多的现代化风格的图形控件。
2020-12-10 10:04
3
回复
举报
没有组织发布类似adoptjdk这种自己编译的包吗,发布这种包违反qt的协议吗
2020-12-10 09:18
1
回复
举报
文章大概说意思是 qt6 测试版结束,如今发布预览版,一般用户仍然是韭菜
2020-12-09 18:14
4
回复
举报
不知道陈年BUG非整数倍缩放画面会撕裂的问题解决了没有
2020-12-09 16:35
1
回复
举报
没有离线安装包,差评,真不知道官方怎么想的
2020-12-09 14:41
8
回复
举报
免费软件,又不是付费的,要求太多了,自己编译
2020-12-09 17:26
0
回复
举报
对免费版的限制越来越多呗。
2020-12-09 20:59
0
回复
举报
有下载源码自己编译
2020-12-09 21:24
0
回复
举报
QT已死,说白了就是想大家购买商业版,对开源版不重视了,自己编译至少要15个小时。服了
2020-12-09 21:52
2
回复
举报
能免费,那怎么实现商业价值目标呢?
2020-12-10 07:57
1
回复
举报
编译过很多次电脑版本的了,如果不编译webengine模块,没那么长时间。一般不到半个小时就好了。用-skip参数把自己不要的模块不编译就行了
2020-12-10 12:10
1
回复
举报
windows下可以从msys2的仓库安装,不一定非得自己编译,实际上你在windows下叫我自己编译我也玩不来
2020-12-11 05:52
1
回复
举报
没学过,有空搞一哈
2020-12-09 12:51
1
回复
举报
更多评论
34 评论
15 收藏
分享
返回顶部
顶部