历时八年,Qt6正式版现已发布为什么没人关注? - 小众知识

历时八年,Qt6正式版现已发布为什么没人关注?

2021-06-07 08:48:45 苏内容
  标签: Qt6
阅读:5129

Qt 6.0正式发布。这是第一个版本,标志着Qt的重要里程碑。毕竟咱们上一次更新还是八年前!

工具推荐:

  • QtitanRibbon下载试用: 遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart | 下载试用 :是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。并且支持所有主要的桌面操作系

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

作为跨平台框架,Qt需要适应那些不断变化的需求。在Qt 5的生命周期内,已经设法很好地适应了其中的许多要求。但是,在Qt 5系列中保持完整的源代码和二进制兼容性使得某些事情在其生命周期内无法修复。使用Qt 6,我们现在有机会进行更改并构建Qt,使其更适合未来。

因此,Qt 6的任务是使Qt成为未来的开发平台。作为Qt的主要版本,Qt 6.0为我们提供了更高的自由度,以实现新功能,以及更好地支持当今和未来的需求。Qt 6.0是Qt 5系列的延续,一直致力于使迁移对用户无干扰。
Qt 6遵守并维护的Qt核心价值,包括:

  • 它具有跨平台的特性,允许用户使用一种技术并从一个代码库将其应用程序部署到所有台式机,移动和嵌入式平台
  • 从低端,单用途设备到高端复杂台式机应用程序或连接系统的可扩展性
  • 其世界一流的API,工具和文档,简化了应用程序和设备的创建
  • 它的可维护性,稳定性和兼容性,使用户可以轻松维护大型代码库
  • 拥有超过150万用户的大型开发者生态系统

Qt 6.0是Qt 6系列的第一个版本,旨在满足新的市场需求,同时将核心价值作为其核心。
在开发Qt 6时,开发人员深入研究了Qt的一些最核心部分,以确定如何改进它们。发现了两个核心重点领域,并投入了大量时间进行改进。这些领域包括:

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

C ++ 17


现在,对于Qt 6,我们需要一个与C ++ 17兼容的编译器,以便在开发Qt时使用更现代的C ++语言构造,并允许在API方面进行集成。

核心库和API

Qt Core已完成许多工作,因为它是实现Qt最核心部分的模块。我们已经遍历了许多领域并进行了改进。列举一些最核心的:

  • 新的属性和绑定系统:该系统现在带来了绑定的概念,这使得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已经看到许多清理和改进。

新的图形架构

Qt 5 的图形架构在很大程度上依赖于 OpenGL 作为底层 3D 图形 API。虽然这在2012年我们创建Qt 5时是正确的做法,但随着Metal和Vulkan的引入,过去几年我们周围的市场发生了重大变化。我们现在有一大套不同的图形API,这些API在不同的平台上被普遍使用。对于Qt作为一个跨平台框架来说,这当然意味着我们必须对此进行调整,并确保我们的用户可以在所有的平台上以最高的性能运行Qt。



因此,当Qt 5依靠OpenGL来实现硬件加速的图形时,Qt 6的情况完全改变了。Qt Quick中的所有3D图形现在都建立在一个新的3D图形抽象层之上,称为RHI(Rendering Hardware Interface)。RHI 使得 Qt 可以使用底层操作系统/平台的原生 3D 图形 API。因此,Qt Quick 现在将在 Windows 上使用 Direct3D,在 macOS 上默认使用 Metal。详情请看关于RHI的系列博文。

Qt中的OpenGL专用类仍然存在,但现在被移出QtGui,放在QtOpenGL模块中。现在还增加了一个新的模块,叫做QtShaderTools,以跨平台的方式处理这些API的不同着色语言。

Qt Quick 3D和Qt 3D

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

这个模块在Qt 6中得到了显著的改进,这是我们在Qt 5系列中无法做到的。最重要的是,它现在总是使用RHI抽象层来优化使用底层图形API和硬件。此外,它现在的特点是在2D和3D内容之间进行了更深入、更有性能的整合,允许你将2D项目放入3D场景中。它还大大改进了对glTF2和基于物理学的渲染的支持,使得导入在其他设计工具中创建的资产变得轻而易举。该模块还有许多其他重大改进,更深入的描述可以在单独的博客文章中找到。

Qt 3D现在也是基于RHI抽象层之上,已经进行了一些性能改进和清理。

Qt Quick的桌面样式

当我们为Qt Quick创建这套控件时,我们的重点是让它们变得轻量级和高性能,因此,它们在Qt 5中不支持桌面风格。然而,在Qt 6中,我们找到了一种方法,让它们在桌面操作系统上看起来和感觉上都是原生的。在 6.0 中,Qt Quick 现在支持 macOS 和 Windows 上的原生样式。详情请看这篇博文。在Qt 5中,Material和Fusion风格已经为Android和Linux提供了原生的外观和感觉,现正在为未来的Qt版本改进这些风格,同时也计划为iOS实现原生风格。

与平台特定功能的接口

即使Qt提供了独立开发应用程序平台所需的大多数功能,有时还是需要与特定于平台的功能进行交互。在Qt 5中,提供了一组附加模块(QtX11Extras,QtWinExtras,QtMacExtras)来帮助实现此目的。但是,与Qt其余部分的这种完全隔离导致了Qt内部的一些体系结构问题,不一致和代码重复。在Qt 6中,正努力进行清理,并将那些附加模块提供的功能折叠到直接在Qt中提供的平台特定的API中。在Qt 6中,这将使与OS /特定于平台的API的接口更加容易。

构建系统


我们还对构建和分发Qt的方式进行了一些重大更改。值得一提的是,Qt 6本身现在是使用CMake构建的。这也为使用CMake构建项目的所有用户带来了重大改进。我们将在Qt 6的整个生命周期内继续支持qmake,因此,如果您正在使用它,则无需对构建系统进行任何更改,但是我们建议对所有新项目都使用CMake。

Qt 6还带有一个更小的默认软件包,许多附加组件现在通过软件包管理器作为单独的软件包分发。这使我们能够更灵活地调整加载项的发布时间表以适应市场需求,例如,允许将更频繁的功能发布作为核心Qt软件包,或使其同时可用于多个Qt版本。此外,我们可以将包裹管理器用作第三方内容的传递渠道。最后,它为我们的用户提供了更大的灵活性,因为他们可以选择仅下载他们真正需要的内容。

当前,我们使用现有的Qt安装程序作为程序包管理器的后端,但是正在研究将来版本的替代方法。

兼容性

在对 Qt 6 进行修改时,我们试图调整我们的 API,使其符合我们认为未来所需的要求,同时尽量减少对现有用户的破坏。虽然您的代码需要进行一些调整,以尽可能地使用 Qt 6,但我们已经尽量使移植到新版本变得简单。

我们做的第一件事就是清理我们的代码库。在Qt 5的生命周期中,我们废止了不少API甚至整个模块。我们所做的第一件事就是删除这些,以便为未来的Qt提供更精简的服务,并允许我们留下一些今天已经没有意义的东西。

然而,我们已经注意将尽可能多的这些API标记为Qt 5.15中的废弃。启用废弃警告并清理这些API将使你的代码库与Qt 6兼容。

一些在 Qt 5 中被删除的最常用的 API 已经被移到了 Qt5CoreCompat 模块中。它包含了一些在Qt 6中被广泛使用的类,如QRegExp,QTextCodec,旧的XML的SAX解析器,以及其他一些项目。这个模块的目的是作为一个移植帮助,除了针对Qt 5的回归和安全相关问题外,不会收到bug修复。我们建议您使用它来进行移植,但随后逐步删除您对模块的依赖。

支持平台

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

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

在嵌入式方面,我们支持各种运行Linux的嵌入式设备。Qt 6尚不支持Qt 5支持的任何嵌入式实时操作系统。QNX和INTEGRITY最近都增加了对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.1和6.2的发布时间表,并计划在4月份发布Qt 6.1。之后,9月底发布Qt 6系列的第一个长期支持版本Qt 6.2 LTS。

而我们今年的工作还没有结束,你还可以期待在圣诞节前发布全新版本的Qt Creator和Qt Design Studio! 这两款产品都将全面支持Qt 6。

概要

Qt 6.0是下一代Qt的起点。它的功能尚未达到5.15,但我们将在未来几个月内填补空白。我们在布局下一版Qt的基础方面做了很多重要的工作。其中许多变化可能不会立即显现出来,但我坚信,这些变化将有助于保持Qt在未来几年的竞争力。


扩展阅读
相关阅读
© CopyRight 2010-2021, PREDREAM.ORG, Inc.All Rights Reserved. 京ICP备13045924号-1