两个月前,Qt 5.13 稳定版正式发布,按照官方提供的发布计划,Qt 5.14
将在今年年底发布,明年中旬推出 Qt 5.15(或许是 Qt 5
的最后一个版本),接着就是可能会在 2020 年底问世的 Qt 6。

计划于上个月发布的 Qt 5.14
经过短暂的推迟后,现在终于发布了稳定版。该版本以及明年的
Qt 5.15 LTS 开始为发布 Qt 6
做铺垫。开发团队表示,尽管他们正在努力通过标记不推荐使用的功能以使将来尽可能平稳地移植到
Qt 6,但现在还是引入了一些新功能。

澳门葡萄京官方网站 1

这就意味着从 Qt 5 到 Qt
6,期间经历了长达八年的时间,如此大的跨度,对于一个开源框架意味着什么?Qt
6 又会迎来怎样的变化?近日 Qt
团队在博客发表文章介绍了他们在技术方面对 Qt 6
寄予的愿景
。下面就来看看官方是如何看待 Qt 6 的。

Qt 5.14 更新内容概述:

几经耽搁,Qt
5.5于本周三正式对外发布。该本版具有着许多的新功能和一些面向Qt5工具包令人兴奋的更新。以下为官方发布日志的摘译:我很高兴地宣布,Qt
5.5在今天正式发布。在过去的6个月时间里,我们一直努力工作以营造一次超赞的版本发布。结果是,我们收到了接近1500个报告的Bug,并已经完成修复,以及对我们的整个栈实现了大幅的性能改进。同时还修补了产品在跨平台方面的几个缺陷,让在各个平台的功能更加的平衡和有好,并且优化了诸如多媒体和蓝牙方面的功能。我们也付出了大量的时间和努力,以确保Windows
10一经微软发布后,Qt 5.5提供对该系统的完美支持。从QT
5.3开始,QT就可以很好地运行在Windows 8上的新WinRT
APIs,这让我们很受鼓舞。也由此,我们接下来有信心相信QT
5.5能够完美支持Windows 10,只要能够及时更新Qt
5.5.x就好。现在,Linux包可在RedHat Enterprise
Linux上进行构建,支持更多的Linux发行版。大量的工作时间也被投入到了Mac OS
X版的QT,我们现在使用苹果的Secure
Transport层来启用SSL功能,支持蓝牙和Bluetooth LE,支持Qt
WebView和修复了Qt Multimedia方面的大量问题。简化产品结构QT
5.5另外一个大的变化是大大简化了产品结构,现在Qt有三个版本:Qt for
Application
Development:这是商业版本,允许你在Qt支持的所有桌面和移动平台创建应用。它有着全面的支持和完善商业许可。Qt
for Device
Creation:这是第二个商业产品,目标是构建和开发嵌入式设备,并提供大量工具链和其它的一些支持,让你的一切工作变得更加轻松,当然也有着全面的支持和商业许可。Qt
Open Source:这是我们的开源版本,遵循LGPL
2.1/3或者GPL。产品的更多细节请关注QT的新产品页面:qt.io。新功能和往常一样,Qt
5.5捆绑了最新的Qt
Creator版本和大量的新功能。我选了一些放在了本篇文章里,如下:蓝牙Bluetooth
LE API先前已出现在了Qt
5.4技术预览版中,现在是最终版,可全面支持Android、Mac OS
X和iOS,又或者是Linux现有的后端上。图形由于Qt的root是一个图形化的工具包,我们一直在专注于图形的功能强化。自Qt
2问世就集成了OpenGL,这种做法一直以来相对而言还是比较low的。在最新的Qt
5.5中,我们有了很大的进步,新增了2个模块来扩展3D
APIs,从而完善和改进图形工具包。Qt Canvas
3D是一个新的模块,可非常轻松地从Qt
Quick直接使用WebGL。该模块最先出现在Qt
5.4的技术预览版中,现在它已经非常成熟了,最终作为了Qt
frameworks内完全支持的模块。Qt Canvas 3D面向Qt Quick实现了一个WebGL-like
API,可被用于较低级WebGL代码或结合JavaScript
frameworks。另一个新模块是Qt 3D,是Qt
5.5技术预览版的一部分。不过,此前是作为QT
4问世时的一个库,但现在经过较大的重新的构建,它已经非常适合现代OpenGL的世界。视频解读:
3D对于OpenGL最大的支持改进是让它更容易整合3D内容至Qt应用。该模块还带来了C++和QML
APIs。更多细节参见:Qt 3D文档和KDAB博文,及Qt
3D游戏demo。但作为一个技术预览,这个模块仍然有一点粗糙。请大家多多反馈,我们会在Qt
5.6中提供更好的支持和兼容。在Windows上使用OpenGL一直有一些问题,主要是因为并非所有的驱动都是默认安装,Qt
5.5已经解决了这个问题。Qt Location另一个Qt 5.5技术预览版的新模块是Qt
Location,增加了mapping、geocoding、routes和places支持。这些可结合现有的Qt
Positioning API一起使用,从而提供应用的位置服务。Qt
Location还可以支持不同的地图服务商。目前,我们支持Nokia
Here、Mapbox和Openstreetmap。更多例子请参见这个文档:Qt
Quick
QML和JavaScript引擎现在支持JavaScript类型数组。在QT核心,我们还增加了Q_GADGETs的性能和可调用的方法,以及改进Mac
OS X、iOS上的Flickable和PinchArea。The Enterprise Controls已并入Qt Quick
Controls,现在也已开源。Qt
Multimedia
在Linux上,我们已经增加了GStreamer
1.0支持和许多其它平台上的bug修复;相机支持有了较大的改进;新增的Video
filtering
framework非常强大,允许集成frameworks,比如OpenCL或CUDA。解读视频:Qt
WebEngine
Qt WebEngine已更新至Chromium
40版本,并获得了新API来管理文件的下载、控制缓存和cookies,及设置。Qt
WebChannel现在是内置的,许多的实验性的APIs是公开的并获得了全面的支持。澳门葡萄京官方网站,其它其他更多的QT
5.5改进和新特性参见wiki。废弃模块新功能到来预示这也有一些功能的离开,他们是Qt
WebKit、Qt Quick 1和Qt Script。所有这些模块依然在Qt
5.5中可以使用,但是我们强烈建议使用他们的替代品:Qt WebEngine、Qt
Quick和 Qt
QML,这些能完全兼容JavaScript引擎。大多数情况下,新的模块可提供更多完善的特性和完美的兼容性。进一步了解Qt
5.5
为了让你更好地了解Qt
5.5,我们已经安排了两场在线研讨会,在这里可以获取第一手的Qt
5.5新消息,请确保已经注册:。Qt World Summit
2015是一个开放的会议,你可以关注下:。发布日志:[url=” “]
[/url]下载地址:

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

  • 引入了一个独立于图形 API
    的场景图(scenegraph)渲染器,该渲染器将继续在 Qt 6.0 上使用,并且对于
    Qt on Vulkan 来说也很重要;
  • 正在进行的 HiDPI 改进(用于处理当今的高像素密度显示器);
  • 针对 Qt 3D 线程和其他 Qt Quick 3D 工作的改进;
  • 对带有 Qt Multimedia 的 GStreamer OpenGL 的支持;
  • 引入 Qt Quick Timeline;
  • 升级 Qt WebEngine 以及 Chromium 上的所有最新产品;
  • 升级 Qt for Automation

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

虽然 Qt 已将 OpenGL 用作基本图形 API,但现在它开始支持更广泛的图形
API。Qt 5.14 包括一个独立于图形 API 的场景图渲染器(通过称为 Qt
渲染硬件接口的抽象层)作为选择功能。通过它,我们可以在 Vulkan、Metal 和
Direct3D 11 之上运行 Qt Quick
应用程序。因此,我们可以选择直接在操作系统提供的原生图形 API 之上运行 Qt
应用程序。这也将使升级到 Qt 6 更容易,因为渲染硬件接口将是在 Qt 6
中渲染图形的标准方法。

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

Qt Quick 新添加的 Qt Quick Timeline
模型提供了一种通过时间轴和关键帧为属性设置动画的简便方法。此外,Qt
Quick 引入的另一个功能是鼠标滚轮的事件处理程序(亦称为”WheelHandler“)和来自触控板的模拟鼠标滚轮事件。

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

Qt Quick 3D 也是一个新模块,开发团队表示正在努力提供一个高级 API,用于从
Qt Quick 为用户界面创建 3D 内容。简而言之,现在我们可以使用 QML 来定义
3D 场景,从而允许对 UI 的 2D 和 3D 部分使用基于 QML
的方法。这种新方法将使我们可以使用一个runtime (Qt
Quick)、一个公共场景图和一个动画框架。我们将能够在一个设计工具 Qt Design
Studio 中以图形方式设计所有这些元素。

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

详细内容请查看 https://www.qt.io/blog/

下一代 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 
有足够的兼容性,如此一来开发者就可以轻松维护一个同时针对这两个版本编译的大型代码库。

(文/开源中国)