Qt 6.0发布

Qt6.0于2020年12月8日发布。

Qt官网的发布博客地址

https://www.qt.io/blog/qt-6.0-released

 

今天宣布Qt 6.0的发布,我真的很激动。这是新的主要版本的第一次发布,标志着Qt的一个重要里程碑。几年前,我们开始研究最初的想法,从那以后,我们为创造下一代Qt付出了巨大的努力。

 

Qt 5多年来取得了巨大的成功,自Qt 5.0发布以来的八年里,我们的用户群和Qt使用量都有了巨大的增长。但自2012年以来,世界发生了重大变化。Qt在嵌入式系统中的使用飞速发展,C++也在发展,新的3D图形API也出现了。这些都是直接影响Qt的因素的例子。

作为一个跨平台的框架,Qt需要适应这些不断变化的需求。在Qt 5的生命周期中,我们已经很好地适应了这些需求。然而,在Qt 5系列中保持完全的源代码和二进制兼容性使得某些事情在它的生命周期内不可能修复。有了Qt 6,我们现在有机会做出改变,并构建Qt以更好地适应未来几年。

因此,Qt 6的使命是让Qt成为未来的生产力平台。Qt 6.0作为Qt的一个主要版本,给了我们更高的自由度来实现新的特性、功能和更好地支持今天和明天的需求。Qt 6.0Qt 5系列的延续,我们一直致力于使迁移对用户无中断。我发表了一篇Qt 6愿景博文捕捉18个月前的想法。

在创建Qt 6时,我们确保Qt的核心价值观得到坚持和维护,包括:

  • 它的跨平台特性,允许用户使用一种技术并从单个代码库将他们的应用程序部署到所有桌面、移动和嵌入式平台
  • 其可扩展性从低端的单一用途设备到高端的复杂桌面应用程序或互联系统
  • 其世界一流的应用编程接口和工具文件,简化了应用程序和设备的创建
  • 它的可维护性、稳定性和兼容性,允许用户用最少的努力来维护大型代码库
  • 拥有超过150万用户的大型开发者生态系统

Qt 6.0Qt 6系列的第一个版本,它解决了新的市场需求,同时将核心价值保持在我们工作的核心。

在开发Qt 6时,我们深入研究了Qt的一些核心部分,以确定我们如何改进它们。我们发现了几个核心重点领域,并投入大量时间进行改进。这些领域包括:

  • 利用C++17
  • 下一代QML
  • 新图形架构
  • Qt Quick统一2D和3D
  • CMake构建系统(应用程序仍支持qmake)

我们当然也花时间在其他领域做了大量的改进,太多了,不能在这里一一提及,我建议你看看更详细的维基页面。我们还将举办满足Qt 6.0”网络研讨会,涵盖美洲/欧洲、中东和非洲地区欧洲、中东和非洲/APAC时区。但是让我们来看看一些亮点。

C++17

 

有了Qt 6,我们现在需要一个C++17兼容的编译器,以便在开发Qt时使用更现代的C++语言结构,并且允许在应用编程接口端有集成点。

核心库和应用编程接口

Qt核心已经做了很多工作,因为它是实现Qt最核心部分的模块。我们已经在那里经历了许多领域并做出了改进。举几个最重要的例子:

  • 新的属性和绑定系统:这个系统现在引入了绑定的概念,这使得QML在C++的Qt 5中取得了巨大的成功。
  • 字符串和Unicode:有了Qt 5,我们开始将Qt完全与Unicode对齐,在这里我们完成了大量的工作,但是还有一些项目需要我们为Qt 6进行清理。更多细节将在稍后单独的博客中公布。
  • QList是Qt 5中经常被批评的一个类,因为它是对存储在其中的大于指针的对象进行堆分配,这给堆分配方法带来了压力。在Qt 6中,我们改变了这一点,将QList和QVector统一为一个类。查看我们的关于QList的博文有关详细信息,请参见Qt 6。
  • QMetaType和QVariant是我们Qt元对象系统工作的基础。没有QMetaType,信号和插槽是不可能的,动态调用需要QVariant。这两个类用Qt 6几乎完成了重写,您可以阅读有关细节这里

Qt其他与图形无关的部分也出现了较大的变化。例如,Qt并发已经经历了几乎完全的重写,现在多线程应用程序的开发比以往任何时候都更加容易。Qt网络已经经历了许多清理和改进。看到这个了吗博客文章详情。

新图形架构 

Qt 5的图形架构非常依赖OpenGL作为底层的3D图形应用编程接口。虽然这是我们在2012年创建Qt 5时的正确方法,但随着MetalVulkan的推出,我们周围的市场在过去几年发生了显著变化。我们现在有一大套不同的图形API,通常在不同的平台上使用。对于作为跨平台框架的Qt来说,这当然意味着我们必须适应这一点,并确保我们的用户可以在所有平台上运行Qt最高性能。

 

因此,虽然Qt 5依赖OpenGL实现硬件加速图形,但Qt 6完全改变了局面。Qt Quick中的所有3D图形现在都建立在一个名为RHI(渲染硬件接口)的新的3D图形抽象层之上。RHI使得Qt可以使用底层操作系统/平台的本地3D图形应用编程接口。所以Qt Quick现在默认会在Windows上使用Direct3D,在macOS上使用Metal。有关详细信息,请查看关于RHI的博文系列 

QtOpenGL特定的类仍然存在,但是现在被移出了QtGuiQtOpenGL模块。我们还添加了一个名为QtShaderTools以跨平台的方式处理这些应用程序接口的不同着色语言。

Qt快速3DQt 3D

Qt Quick 3D是一个比较新的模块。它无缝扩展了Qt Quick3D功能。对于Qt Quick 3D,我们的重点是创建一个与Qt Quick现有部分(用于2D用户界面)一样易于使用的应用编程接口,同时为创建复杂的3D场景提供全面支持。这项工作背后的主要目标是实现2D3D内容的无缝集成。

本模块见证了Qt 6的重大改进,这是我们在Qt 5系列中无法做到的。最重要的是,它现在总是使用RHI抽象层来优化底层图形应用编程接口和硬件。此外,它现在的特点是在2D3D内容之间有一个更深、更高性能的集成,允许您将2D项目放入3D场景中。它还极大地改进了对glTF2和基于物理的渲染的支持,使得导入在其他设计工具中创建的资产变得微不足道。该模块还有许多其他主要改进,更深入的描述可以在单独的博客文章

Qt 3D现在也是基于RHI抽象层之上的,已经看到了一些性能改进和清理。您可以在我们的合作伙伴KDAB的两篇博客文章中找到更多详细信息(这里这里).

Qt Quick的桌面样式

 

当我们为Qt Quick创建控件集时,我们的重点是使它们轻量级和高性能。因此,他们不支持Qt 5中的桌面样式。然而,在Qt 6中,我们找到了一种方法,使它们在桌面操作系统上看起来和感觉上都是本地的。通过6.0Qt Quick现在支持macOSWindows上的本机样式。看到这个了吗关于细节的博文Qt 5中的材质和融合风格已经存在安卓和Linux的本地外观和感觉。我们正在为未来的Qt版本改进这些,并计划为iOS实现一种本地风格。

与特定平台功能的接口

即使Qt提供了独立开发应用程序平台所需的大部分功能,有时也需要与特定于平台的功能接口。在Qt 5中,我们提供了一组附加模块(QtX11ExtrasQtWinExtrasQtMacExtras)来帮助实现这一目的。但是这种与Qt其余部分的完全分离导致了Qt内部的一些架构问题、不一致和代码重复。在Qt 6中,我们努力对此进行清理,并将这些附加模块提供的功能合并到Qt中直接提供的平台特定的API中。这将使Qt 6中与操作系统/平台特定的应用编程接口更加容易。看一看这里更多详情。

构建系统和包装

 

我们还在如何构建和分发Qt方面做了一些相当大的改变。值得一提的是现在Qt 6本身使用CMake构建。这也为我们所有使用CMake构建项目的用户带来了显著的改进。我们将在Qt 6的生命周期内继续支持qmake,所以如果您正在使用它,没有必要对您的构建系统进行任何更改,但是我们建议所有新项目都使用CMake

Qt 6还附带了一个小得多的默认包,许多附加组件现在通过包管理器作为单独的包分发。这给了我们更大的灵活性来调整附加组件的发布时间表以适应市场需求,例如,允许更频繁的特性发布作为核心Qt包,或者让它们同时适用于多个Qt版本。此外,我们可以使用包管理器作为第三方内容的交付渠道。最后,它给了我们的用户更多的灵活性,因为他们可以选择只下载他们真正需要的东西。

目前,我们使用现有的Qt安装程序作为包管理器的后端,但正在研究未来版本的替代方案。查看博文这里更多详情。

兼容性 

当对Qt 6进行更改时,我们试图调整我们的APIs以适应我们认为的未来需求,同时尽量减少对现有用户的破坏。虽然您的代码需要进行一些调整,以充分利用Qt 6,但我们已经尝试尽可能轻松地移植到新版本。

我们做的第一件事就是清理我们的代码库。在Qt 5的生命周期中,我们否决了相当多的API,甚至整个模块。我们做的第一件事是删除这些内容,为未来打造一个更精简的Qt,并允许我们留下一些今天已经没有任何意义的东西。

然而,我们已经注意在Qt 5.15中将尽可能多的这些API标记为不推荐使用。在那里启用不赞成的警告并清除它们将会使你的代码库与Qt 6兼容。

Qt 5中删除的一些最常用的应用程序接口已经被移到了Qt5CoreCompat模块。它包含几个从Qt 6中删除的广泛使用的类,如QRegExpQTextCodec、旧的用于XMLSAX解析器以及一些其他项目。本模块的目的是作为移植帮助,除了针对Qt 5和安全相关问题的回归之外,不会接受错误修复。我们建议您将它用于移植,但随后逐步移除对模块的依赖。 

如果你想开始移植到Qt 6,我们有一个更详细的移植指南在我们的文档中。

支持的平台

Qt一直是一个跨平台的平台,这将在Qt 6中继续。Qt 6.0支持

  • Windows 10
  • macOS 10.14及更高版本
  • Linux (Ubuntu 20.04CentOS 8.1OpenSuSE 15.1)
  • iOS 13或更新版本
  • Android (API级别23或更高)

在嵌入式方面,我们支持多种运行Linux的嵌入式设备。Qt 6还不支持Qt 5支持的任何嵌入式实时操作系统。QNXINTEGRITY最近都增加了对C++17的支持,我们计划在Qt 6.2发布时增加对它们的支持。

观点

Qt 6.0还不支持Qt 5.15中的许多附加模块。这是有意决定释放时间,以确保我们能够完成Qt框架基本模块所需的所有更改。

我们现在正致力于将大部分这些附加组件引入Qt 6。我们已经做了大量的工作,我们希望在Qt 6.2发布的时候,大部分的附加组件能够再次得到支持。许多附加组件已经针对Qt 6进行了编译,但是它们还没有正式发布,因为一些清理工作和重构还有待完成。我们计划在Qt 6.2发布时移植大部分重要的附加组件。下面是我们在Qt 6.0及更高版本中的附加支持的完整概述博客文章

除了将缺失的附加组件移植到Qt 6之外,我们在未来几个月的许多Qt 6相关工作将集中在新版本的稳定性上,并在Qt内部更广泛地使用新的属性系统。

我们已经调整了Qt 6.16.2的发布时间表,并计划在4月份发布Qt 6.1。之后,我们计划在9月底发布Qt 6系列的第一个长期支持版本,Qt 6.2 LTS

而且我们今年还没有完成,你也可以期待一个全新版本的Qt CreatorQt Design Studio在圣诞节前发布!两者都将全力支持Qt 6

摘要

Qt 6.0是下一代Qt的起点。它还没有5.15那么完整,但我们将在未来几个月内填补空白。在为Qt的下一个版本奠定基础方面,我们已经做了大量重要的工作。其中许多变化可能不会立即显现,但我坚信它们将有助于Qt在未来几年保持竞争力。

我想感谢大家谁帮助Qt 6.0成为可能。在Qt 6的开发过程中,超过250人贡献了代码,数千人帮助编写了错误报告并提供了反馈。没有你,Qt 6不会有今天。非常感谢你的辛勤工作!

最后,我希望你们都喜欢你们所看到的Qt 6。不要担心如果你的最喜欢的模块还没有移植,我们正在努力。请从下载新版本我们的网站或者你的季度账户。让我们知道你的想法,我们都很感激反馈帮助我们使后续版本更好!

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值