时隔八年的重大更新,Qt 6将于2020年底发布,除了兼容Qt 5还有哪些看点?
收藏

两个月前,Qt 5.13 稳定版正式发布,按照官方提供的发布计划,Qt 5.14 将在今年年底发布,明年中旬推出 Qt 5.15(或许是 Qt 5 的最后一个版本),接着就是可能会在 2020 年年底问世的 Qt 6。
这就意味着从 Qt 5 到 Qt 6,期间经历了长达八年的时间,如此大的跨度,对于一个开源框架意味着什么?Qt 6 又会迎来怎样的变化?近日 Qt 团队在博客发表文章介绍了他们在技术方面对 Qt 6 寄予的愿景下面就来看看官方是如何看待 Qt 6 的。

按照官方的说法,Qt 6 会保持对 Qt 5 的延续性 —— 继续他们在 Qt 5 系列中所做的工作,并尽可能不对 Qt 5 用户在使用方面造成破坏性影响。但 Qt 6 毕竟是作为一个新的主要版本面世,它也有自己的使命,它将为我们提供更高的自由度来实现新功能,以更好地支持当前和未来的要求,而这不是当前 Qt 5 系列能满足的。

Qt 6 还会对代码库进行清理并使其更易于维护。因此,重点将放在那些需要在 Qt 内进行架构变更的项目中,这带来的影响就是,如果不破坏与 Qt 5.x 某种程度的兼容性就无法完成这些变更。

结合对 Qt 5 的延续性,所以 Qt 6 的目标之一就是在满足新要求的前提下,尽最大程度保证与 Qt 5 系列的兼容性由于 Qt 5 的新版本仍在研发中,官方表示会将 Qt 6 的一些特性放到 Qt 5.14 和 Qt 5.15 LTS 中实现。随着 Qt 5.14 的特性冻结,研发工作的重心将转向 Qt 6,并希望在 2020 年年底发布首个版本。

众所周知,Qt 最大的亮点之一就是其跨平台特性 —— 开发者通过使用一种技术和单一代码库即可将应用程序部署到所有桌面、移动和嵌入式平台。而桌面平台是 Qt 立足的根本,对 Qt 而言这是最核心和最重要的市场。因此保持 Qt 在桌面市场的健康和增长是在其他市场也能够增长的先决条件。

下面将介绍在 Qt 中进行的一些关键技术变更,以使其能适应未来几年的技术发展。

下一代 QML

QML 和 Qt Quick 是过去几年推动 Qt 框架持续增长的主要技术。通过使用这些技术以直观的方式创建用户界面也是其产品的独特卖点。

不过 QML 毕竟是为 Qt 5 而创建的,存在一些怪异的操作及其局限性。因此开发团队计划借 Qt 6 以实现对 QML 的重大改进。目前计划的主要变化是:
  • 引入强大的类型系统

  • 使 JavaScript 成为 QML 的可选功能

  • 移除 QML 的版本控制功能

  • 移除 QObject 和 QML 之间的重复数据结构

  • 避免在 runtime 阶段生成数据结构

  • 支持将 QML 编译为高效的 C++ 和原生代码

  • 支持隐藏实现细节

  • 更好的工具集成

下一代图形堆栈

自 Qt 5 发布以来,图形领域已经发生了许多变化,所以 Qt 框架不得不对图形堆栈进行重大改进以保持竞争力。

Qt 5 使用 OpenGL 作为 3D 图形的统一 API。不过也是从那时起,业界诞生了许多新的 API。Vulkan 是 Linux 平台上 OpenGL 的指定继承者,Apple 正在推动 Metal 的发展,而微软则推出了 Direct 3D。这就意味着 Qt 将来必须与所有这些 API 无缝协作。为了实现这一点,Qt 必须定义一个新的层对图形 API 进行抽象(如用于平台集成的 QPA),官方将这个层称为渲染硬件接口(Rendering Hardware Interface,RHI),他们需要将所有渲染基础设施(QPainter,Qt Quick Scenegraph 以及对 3D 的支持)建立在该层之上。

此外,团队还打算为 Qt 6 带来统一的主题/样式引擎,这将使我们能够在桌面和移动平台上获得 Qt Widgets 和 Qt Quick 的原生外观。

对 C++ API 的增强

C++ 在过去几年里发生了巨大的变化。Qt 5 使用的还是 C++98 标准,到现在 Qt 6 已经开始使用 C++ 17。C++ 17 提供了更多的开箱即用功能,而这在 Qt 5 中是无法使用的,所以 Qt 6 的目标是更好地集成 C++ 17 的新功能,并保持对 Qt 5 的兼容性。

除此之外,团队还计划通过 C++ 为 QML 和 Qt Quick 引入一些新功能,致力于为 QObject 和相关类引入一个新的属性系统,将 QML 中的绑定引擎集成到 Qt 的内核,并可通过 C++ 进行使用。

新的属性系统和绑定引擎将大大减少绑定的 runtime 开销和内存消耗,并使 Qt 的所有其他部分都可以访问它们,而不仅仅是 Qt Quick。

对新语言的支持

Qt 5.12 引入了对 Python 的支持,此外团队还尝试通过引入 Qt for WebAssembly 技术将浏览器添加为新平台。在 6.0 发布之后,保持并进一步扩展其跨平台特性将是 Qt 6 系列的重要组成部分。

与 Qt 5 的兼容性和增量改进

保持与旧版本的兼容性非常重要,官方表示这也是他们开发 Qt 6 的主要要求之一。团队在博客中说到,他们确实会删除 Qt 的某些弃用功能,但也会确保用户所需的功能不受影响。这意味着关键功能,例如 Qt Widgets 和大部分用户使用的其他功能都将保持其可用性。

团队还计划对 Qt 5 系列中无法完成的核心类和功能进行渐进式改进,目的是保持完全的源代码兼容性,但由于对二进制兼容性没有要求,因此团队会继续实现在 Qt 5 中无法完成的代码清理和改进。

最终的目标应该是 Qt 6 与 Qt 5.15 LTS 有足够的兼容性,如此一来开发者就可以轻松维护一个同时针对这两个版本编译的大型代码库。

开源中国征稿啦!


开源中国 www.oschina.net 是目前备受关注、具有强大影响力的开源技术社区,拥有超过 400 万的开源技术精英。我们传播开源的理念,推广开源项目,为 IT 开发者提供一个发现、使用、并交流开源技术的平台。


现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:我要投稿

推荐阅读

码云Gitee率先支持中国开源许可证:木兰宽松许可证

Zend 创始人提议创建 PHP 方言,暂命名为 P++

10块钱将 Mac 笔记本变成触摸屏的开源方案

C++20最新进展:移除合约、新增类模板参数推导优化

知名技术杂志 Linux Journal 因资金耗尽宣布关闭

官方公众号