Qt官方信息
- Qt官网:http://qt.digia.com/
- Qt开源官网:http://qt-project.org/
- Qt最新版本下载:http://qt-project.org/downloads
- Qt所有版本下载:ftp://ftp.qt-project.org/qt/source/
- Qt Creator所有版本下载:ftp://ftp.qt-project.org/qtcreator/
Qt与Qt Creator简介
Qt是一个跨平台应用程序和 UI 开发框架。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。
Qt Creator 是全新的跨平台Qt IDE,可单独使用,也可与 Qt 库和开发工具组成 一套完整的SDK. 其中包括:高级 C++ 代码编辑器,项目和生成管理工具,集成的上下文相关的帮助系统,图形化调试器,代码管理和浏览工具。
Qt功能与特性
- 直观的 C++ 类库:模块化 Qt C++ 类库提供一套丰富的应用程序生成块 (block),包含了构建高级跨平台应用程序所需的全部功能。具有直观,易学、易用,生成好理解、易维护的代码等特点。
- 跨桌面和嵌入式操作系统的移植性:使用 Qt,您只需一次性开发应用程序,就可跨不同桌面和嵌入式操作系统进行部署,而无须重新编写源代码,可以说Qt无处不在(QtEverywhere) 。
- 使用单一的源代码库定位多个操作系统;
- 通过重新利用代码可将代码跨设备进行部署;
- 无须考虑平台,可重新分配开发资源;
- 代码不受担忧平台更改影响的长远考虑 ;
- 使开发人员专注于构建软件的核心价值,而不是维护 API 。
- 具有跨平台 IDE 的集成开发工具:Qt Creator 是专为满足 Qt 开发人员需求而量身定制的跨平台集成开发环境 (IDE)。Qt Creator 可在 Windows、Linux/X11 和 Mac OS X 桌面操作系统上运行,供开发人员针对多个桌面和移动设备平台创建应用程序。
- 在嵌入式系统上的高运行时间性能,占用资源少。
Qt Creator功能和特性
- 复杂代码编辑器:Qt Creator 的高级代码编辑器支持编辑 C++ 和 QML (JavaScript)、上下文相关帮助、代码完成功能、本机代码转化及其他功能。
- 版本控制:Qt Creator 汇集了最流行的版本控制系统,包括 Git、Subversion、Perforce、CVS 和 Mercurial。
- 集成用户界面设计器:Qt Creator 提供了两个集成的可视化编辑器:用于通过 Qt widget 生成用户界面的 Qt Designer,以及用于通过 QML 语言开发动态用户界面的 Qt Quick Designer*。
- 项目和编译管理 :无论是导入现有项目还是创建一个全新项目,Qt Creator 都能生成所有必要的文件。包括对 cross-qmake 和 Cmake 的支持。
- 桌面和移动平台:Qt Creator 支持在桌面系统和移动设备中编译和运行 Qt 应用程序。通过编译设置您可以在目标平台之间快速切换。
- Qt 模拟器:Qt模拟器是诺基亚 Qt SDK的一部分,可在与目标移动设备相似的环境中对移动设备的 Qt 应用程序进行测试。
Qt的历史
- 1996年Qt 上市
- Qt 已成为数以万计商业和开源应用程序的基础
- Qt 的软件授权机制具有经受市场检验的双重授权(开源与商业)模式
- Qt Software 的前身为 Trolltech(奇趣科技)。 Trolltech (奇趣科技)始创于1994年
- Trolltech (奇趣科技)于2008年6月被 Nokia 收购,加速了其跨平台开发战略
- 2012年8月芬兰IT业务供应商Digia全面收购诺基亚Qt业务及其技术
Qt所支持的平台
1.嵌入式 Linux (Embedded Linux)
Qt for Embedded Linux® 是用于嵌入式 Linux 所支持设备的领先应用程序架构。您可以使用 Qt 创建具有独特用户体验的具备高效内存效率的设备和应用程序。Qt 可以在任何支持 Linux 的平台上运行。Qt 的直观 API,让您只须少数几行代码便可以更短的时间实现更高端的功能。
特点:
(1) 用于Linux 的紧凑的视窗系统;
(2) 用于广泛的应用程序处理器的开发;
(3) 移植桌面代码至嵌入式平台,或通过重新编译,反之亦然;
(4) 编译移除不常使用的组件与功能;
(5) 利用系统资源并实现本地化性能;
(6) 开发嵌入式设备犹如开发桌面系统一样轻松简单。
Qt 除了提供所有 工具 以及 API 与 类库 ,( 如WebKit ) 外,Qt for Embedded Linux 还提供用于最优化嵌入式开发环境的主要组件。
- 紧凑高效的视窗系统 (QWS):Qt 构建在标准的 API 上,应用于嵌入式 Linux 设备,并带有自己的紧凑视窗系统。基于 Qt 的应用程序直接写入Linux 帧缓冲,解除了您对 X11 视窗系统的需求。具有减少内存消耗,占位更小,可利用硬件加速图形的优势,可编译移除不常使用的组件与功能等特点。
- 虚拟帧缓冲 (QVFb):Qt for Embedded Linux 提供一个虚拟帧缓冲器,可以采用点对点逐像素匹配物理设备显示。具有真实的测试构架,在桌面系统上嵌入式测试,模拟物理设备显示的宽度、高度与色深等特点。
- 进程间通讯 (IPC) :IPC (进程间通讯)可以创建丰富的多应用程序用户体验。定义进程间通讯的两个主要概念即:信道与消息。可以进程并向信道发送消息,任何时候只要到一个进程便可创建信道。
- 扩展的字体格式:Qt 支持嵌入式 Linux 上的多种字体格式,包括:TrueType®, Postscript®Type1 与 Qt 预呈现字体。Qt 扩展了Unicode 支持,包括:构建时自动数据抽取和运行时自动更新。另外Qt还提供定制字体格式的插件,允许在运行时轻松添加新字体引擎。应用程序间的字体共享功能可以提高内存效率。
基本要求:
开发环境:Linux 内核 2.4 或更高;GCC 版本 3.3 或更高;用于 MIPS® GCC 版本 3.4. 或更高。
占用存储空间:存储空间取决于配置,压缩后: 1.7 – 4.1 MB,未压缩: 3.6 – 9.0 MB 。
硬件平台:易于载入任何支持带 C++ 编译器和帧缓冲器驱动Linux 的处理器。支持 ARM®,x86®, MIPS®, PowerPC® 。
2.Mac 平台
Qt 包括一套集成的开发工具,可加快在 Mac 平台上的开发。在编写 Qt 时,并不需要去设想底层处理器的数字表示法、字节序或架构。要在 Apple平台上支持 Intel 硬件,Qt 客户只需重新编辑其应用程序即可。
3.Windows平台
使用 Qt,只需一次性构建应用程序,无须重新编写源代码,便可跨多个 Windows操作系统的版本进行部署。Qt应用程序支持 WindowsVista、Server 2003、XP、NT4、Me/98 和 Windows CE。
4.Linux/X11平台
Qt 包括一套集成的开发工具,可加快在 X11 平台上的开发。Qt 由于是 KDE 桌面环境的基础,在各个 Linux 社区人尽皆知。几乎 KDE 中的所有功能都是基于 Qt 开发的, 而且 Qt 是全球社区成员用来开发 成千上万的开源 KDE 应用程序的基础。
5.Windows CE/Mobile
Qt 是用 C++ 开发的应用程序和用户界面框架。通过直观的 API,您可以使用 Qt 为大量的设备编写功能丰富的高性能应用程序。Qt 包括一套丰富的工具集与直观的API,意味着只须少数几行代码便可以更短的时间实现更高端的功能。
主要特点:
(1)硬件依存性极小;
(2)支持多数现有的 Windows CE 配置;
(3)对于自定义的硬件配置亦轻松构建;
(4)移植桌面代码至嵌入式平台,或通过重新编译,反之亦然;
(5)编译移除不常使用的组件与功能;
(6)利用系统资源并实现高性能;
(7)开发嵌入式设备尤如开发桌面系统一样轻松简单。
Qt 除了提供所有 工具 以及 API 与 类库 外,Qtfor Windows CE 还提供用于最优化嵌入式开发环境的附加功能。
本地化和可定制的外观:Qt 在使用时,可以支持 Windows Mobile 和 Windows CE 两种样式。 在运行时,Qt 应用程序将检测使用哪一种样式。 采用 Qt 样式表单,您只需要花费用于传统 UI 风格的少许时间和代码行,便可以轻松定制您的应用程序外观。特点:基于HTML 层叠式样式表 (CSS);适用于全部 widget;任何熟悉 CSS 技术的人员都可以定义复杂的样式。
先进的文本布局引擎:Qt for Windows CE 支持 TrueType® 和点阵字体。同时 Qt 还支持扩展的 Unicode 和从右至左的书写语言。Qt 的富文本引擎增加了新的功能用于复杂的文本布局,包括制表和路径追踪,以及环绕图形的文本。
基本要求:
开发环境: Microsoft® Visual Studio® 2005 (Standard Edition) 或更高ActivePerl 。
占用存储空间:紧凑配置 – 4.8 MB,全配置 – 8.4 MB。
操作系统:Windows CE 5 或更高,Windows Mobile 5 或更高。
硬件平台:支持 ARM®, x86®,(在 SH4® 和 MIPS® 上编译) 。
6.塞班平台(Symbian)
Qt 通过和S60 框架的集成为 Symbian平台提供了支持。在最新版的QtSDK 1.1中我们可以直接生成可以在塞班设备上运行的sis文件。
7.MeeGo平台 (Maemo 6 现更名为 MeeGo)
Qt 是一个功能全面的应用程序和用户界面框架,用来开发Maemo 应用程序,也可跨各主要设备和桌面操作系统部署这些程序且无需重新编写源代码的。 如果您在多数情况下开发适用于Symbian、Maemo 或 MeeGo 平台的应用程序,可以使用免费 LGPL 授权方式的 Qt。
Qt将为诺基亚设备运行MeeGo (Harmattan) 提供依托,并可为所有即将推出的 MeeGo 设备中的应用程序开发提供 API,为 Qt 开发人员提供了更多平台。不久,MeeGo 设备就会完全支持 (X11) Qt 。
Qt类库
模块化 Qt C++ 类库提供一套丰富的应用程序生成块(block),包含了生成高级跨平台应用程序所需的全部功能。
(1)先进的图形用户界面(GUI):Qt为您在桌面与嵌入式平台上开发先进的GUI应用程序,带来所有需要的功能。Qt使用所支持平台的本地化图形API,充分利用系统资源并给予应用程序本地化的界面。
- 从按钮和对话框到树形视图与表格都具有完整的控件(窗体)
- 自动缩放,字体、语言与屏幕定位识别布局引擎
- 支持抗锯齿、矢量变形以及可缩放矢量图形 (SVG)
- 具有样式API和窗体样式表,可完全自定义用户界面
- 支持嵌入式设备的硬件加速图形和多重显示功能
(2)基于OpenGL ®与OpenGL ®Es的3D图形:OpenGL® 是一个标准的图形库,用于构建跨平台和支持硬件加速的高性能可视化应用程序。虽然OpenGL完美支持3D图形,但却不支持创建应用程序用户界面。Qt通过与OpenGL 的紧密集成解决了这一难题。
- 在您的应用程序中轻松加入3D图形
- 在嵌入式Linux 与Windows CE 平台上使用OpenGL ES和OpenGL绘画引擎
- 利用系统资源实现最佳图形性能
- 支持Windows 平台上的Direct3D®
(3)多线程:多线程编程是一个执行资源密集型操作而不会冻结应用程序用户界面的有效典范。Qt的跨平台多线程功能简化了并行编程,另外它附加的同步功能可以更加轻松地利用多核架构。
- 管理线程、数据和对象更加轻松
- 基于Qt的信号与槽,实现跨线程类型安全的对象间通讯
- 高端API可以编译多线程程序而无须使用底端基元
(4)嵌入式设备的紧凑视窗系统:Qt构建在标准的 API基础上,用于具有轻量级window系统的嵌入式 Linux 设备。基于 Qt的应用程序直接写入 Linux 帧缓冲,解除了您对 X11 视窗系统的需求。
- 减少内存消耗,内存占用更小
- 可以编译移除不常使用的组件与功能
- 可以利用硬件加速图形
- 在桌面系统上的虚拟帧缓冲可用于嵌入式开发与调试
(5)对象间通讯:在开发用户图形界面中,一个常见的、重复发生系统崩溃与问题的症结根源是如何在不同组件之间进行通信。对于该问题,Qt 的解决方案是信号与槽机制,即执行Observer设计模式。我们可以简单理解为当特殊事件发生的时候,信号就被发出了,一个插槽就是一个函数,被称作特定信号的响应。
- 信号与槽机制是类型安全的(type safe)
- 任意信号都可以连接任意或多个插槽,或跨多个线程
- 简化真正的组件编程
(6)2D图形:Qt给您提供一个功能强大的2D图形画布,用以管理和集成大量的图形元素。
- 高精度可视化大量元素
- 将窗体互动嵌入至图形场景中
- 支持缩放、旋转、动画与变换
(7)多媒体框架:Qt使用
Phonon多媒体框架为众多的多媒体格式提供跨桌面与嵌入式操作系统的回放功能。Phonon可以轻松将音频与视频回放功能加入到Qt应用程序当中,并且在每个目标平台上提取多媒体格式与框架。
以平立的方式提供多媒体内容
从本地文件读取媒体或读取网络上的流媒体
提取Mac上的 QuickTime® ,Windows 上的DirectShow® 以及 Linux 上的Gstreamer
(8)WebKit集成:Qt WebKit集成,即Qt集成了WebKit功能,WebKit是KDE项目下基于 KHTML的开放源web浏览器引擎。目前 Apple®,Google™ 与Nokia等公司使用Qt WebKit集成。
将web与本地内容和服务整合在单一的富应用程序当中
快速创建整合实时web内容与服务的应用程序
使用集成在本地代码中的 HTML 与Java Script
完全控制跨平台的浏览器环境
(9)网络连接:Qt 让您网络编程更简单,并支持跨平台网络编程。
完整的客户/服务器插口提取
支持 HTTP,FTP,DNS 与异步 HTTP 1.1
无论HTML 和XML或图象与媒体文件,它都可以存取所有类型的数据
(10)XML:Qt 为XML 文件以及SAX 和 DOM 协议的C++实现,提供了一个流媒体文件读写器。同时 Qt 还包含了 XQuery – 一个简单的类似 SQL的查询语言,用于解析XML文件来选择和聚合所需要的XML元素,并且将它们转换成XML输出或其它格式的输出。
- 仅需少数几行代码便可实现先进的 XML 查询
- 完全支持 XQuery 1.0 和 XPath 2.0
- 在您自己的应用程序中从XML查询、抽取和转换数据
(11)脚本引擎:Qt 包含一个完全集成 ECMA 标准的脚本引擎。 QtScript 提供 QObject 集成,把 Qt的信号与槽机制整合成脚本,并且实现了C++ 与脚本的集成。
基于ECMA 标准的脚本语言(ECMAScript 3是JavaScript1.5的基础)
- 为简化的对象间通讯使用Qt的信号与槽机制
- 开创新的契机将脚本与您的Qt应用程序相集成
(12)数据库:Qt 帮助您将数据库与您的Qt应用程序无缝集成。Qt支持所有主要的数据驱动,并可让您将SQL发送到数据库服务器,或者让 Qt SQL类自动生成 SQL 查询。
- 支持所有主要的数据库驱动
- 以多种视图或数据识别表单方式显示数据
Qt Quick介绍
Qt Quick是在Qt4.7中被引进的一项技术。Qt Quick 是一种高级用户界面技术,开发人员和设计人员可用它协同创建动画触摸式用户界面和应用程序。它由三部分构成:
(1)QML:像 JavaScript 一样的声明式语言;
(2)Qt Creator:在 Qt IDE中的直观工具;
(3)Qt Declarative:强大的 C++ 模块。
1.主要组成:
- QML:基于 JavaScript 的直观语言 :QML 是一种简便易用的语言,开发人员与用户界面设计人员无需任何 C++ 知识,即可用其描绘出用户界面的外观和功能。
- 面向开发人员和设计人员的共享工具:Qt Creator IDE2.1 版将集成一套开发人员与用户界面设计人员可共享,用以创建和实施 Qt Quick 项目的通用工具。
- 通过 C++ 推动 QML 应用程序:在 Qt 库中的全新Declarative 模块支持生成动态可定制的用户界面,以及通过 C++ 拓展 QML 应用程序。
2.功能特点:
- 快速开发动画式流畅多变的用户界面:通过直观的 QML 语言和一套丰富的 QMLElements——UI 和行为生成块——您可以快速创建出令人印象深刻的用户界面,比您想象的还要快。
- 无需 C++ 知识:如果您具有 JavaScript 的经验或掌握基本的网络技术 (如 HTML 和 CSS),您就可以通过 QML 取得非常不错的成果。
- 瞄准数以百万计的触摸屏设备:使用 Qt Quick,您可以为数以百万计的 Symbian 和 MeeGo 设备生成应用程序,或为各种类型的触摸屏消费类电子设备创建用户界面。
3.应用领域:
- 汽车信息娱乐系统 UI:Cybercom Group 的用户界面设计人员与开发人员尝试使用 Qt Quick 为其汽车信息娱乐平台设计 UI——并取得了令人满意的结果。
- 社交媒体电视:mixd.tv 使用 Qt Quick 为其跨平台网络电视应用程序创建 UI,其用户可以通过社交媒体频道访问和共享在线视频的内容。
- 联网汽车:Qt 的认证合作伙伴 Digia 很快学会了 Qt Quick 并用其创建出了包括导航、电话、游戏和音乐功能的高级汽车 UI。
Qt授权
Qt Commercial Developer License
The Qt Commercial Developer License is the correctlicense to use for the development of proprietary and/or commercial softwarewith Qt where you do not want to share any source code.
You must purchase a Qt Commercial DeveloperLicense from us or from one of our authorized resellers before you startdeveloping commercial software as you are not permitted to begin yourdevelopment with an open source licensed Qt version and convert to thecommercially license version at a later . The Qt Commercial Developer Licenseincludes a restriction that prevents the combining of code developed with theQt GNU LGPL v. 2.1 or GNU GPL v. 3.0 license versi with commerciallylicensed Qt code.
Qt GNU LGPL v. 2.1 Version
This version is available for development ofproprietary and commercial applicati in accordance with the terms andconditi of the GNU Lesser General Public License version 2.1.
Support services are available separately forpurchase.
Qt GNU GPL v. 3.0 Version
This version is freely available for the developmentof open source software governed by the GNU General Public Licenseversion 3.0 (“GPL”).
Support services are available separately forpurchase.
License Comparison Chart
Commercial | LGPL | GPL | |
---|---|---|---|
License cost | License fee charged | No license fee | No license fee |
Must provide source code changes to Qt | No, modificati can be closed | Source code must be provided | Source code must be provided |
Can create proprietary applicati | Yes – No source code must be disclosed | Yes, in accordance with the LGPL v. 2.1 terms | No, applicati are subject to the GPL and source code must be made available |
Updates provided | Yes, immediate notice sent to those with a valid support and update agreement | Yes, made available | Yes, made available |
Support | Yes, to those with a valid support and update agreement | Not included but available separately for purchase | Not included but available separately for purchase |
Charge for Runtimes | Yes, for some embedded uses | No | No |
Qt5简介
Qt 5是进行Qt C++软件开发基本框架的最新版本,其中Qt Quick技术处于核心位置 。同时Qt 5能继续提供给开发人员使用原生QtC++实现精妙的用户体验和让应用程序使用OpenGl/OpenGL ES图形加速的全部功能。通过Qt 5.0提供的用户接口,开发人员能够更快的完成开发任务,针对触摸屏和平板电脑的UI转变与移植需求,也变得更加容易实现.
2012年12月19日,Digia宣布正式发行Qt 5.0。Qt 5.0是一个全新的流行于跨平台应用程序和用户界面开发框架的版本,可应用于桌面、嵌入式和移动应用程序。Qt 5 在性能、功能和易用性方面做了极大的提升,并将于明年可完全支持 Android 和 iOS 平台。Digia明确表明要使Qt 成为世界领先的跨平台开发框架。Qt 5在这个过程中具有重要的意义,它为应用程序开发人员和产品用户提供了最好的用户体验。Qt 5极大地简化了开发过程,让他们能够更快地为多个目标系统开发具有直观用户界面的程序。它还可以很平滑的过度到新的开发模式来满足触摸屏和 Tablet 的需求。
Qt 5的主要优势包括:
图形质量;中低端硬件上的高性能;跨平台移植性;支持 C + + 11; QtWebKit 2 支持的 HTML5;大幅改进QML引擎并加入新的 API;易用性并与 Qt 4 版本兼容。
- 出色的图像处理与表现能力:Qt Quick 2 提供了基于GL的工作模式,它包括一个粒子系统和一系列着色效果集合。Qt Quick 2 让复杂图形的细腻动画和变形处理变得更加容易,也确保了低端架构中2D和3D效果的平滑渲染效果和在高端架构中一样的出色。
- 更高效和灵活的研发: JavaScript和QML在保证对C++基础和Qt Widget支持上发挥着重要作用。Qt Webkit 2中一部分功能就在使用或者正考虑通过HTML 5,彻底的改变Qt
- 跨平台的移植变得更加简单:对于OS开发人员来说,由于基础模块和插件模块采用了新的架构,以及Qt跨平台性的继续强化,Qt已经能够运行在所有的环境中了。而我们的下一步计划:全面的支持iOS和Android系统,现在正在如火如荼的开发中。
Qt 通过使用 OpenGL ES,大大的增加了交付令人印象深刻的图形的能力 (OpenGL ES 是一个专门为嵌入式系统和移动设备而制定的图形应用程序编程接口)。这使它更容易开发和部署具有绚丽动画效果的 2D、3D 图形应用,这些应用在各种性能级别的嵌入式设备上得到平滑运行。例如手机、平板电脑和低成本的开发平台包括 Raspberry Pi。Qt5 新的模块化的代码库使得 Qt5 的跨平台移植性变得更简单。它包含了要点模块组和附加模块组,这种设计会减小系统代码库的尺寸。整合的 Qt 平台抽象层还强调跨平台移植性,开发人员可以通过启用开发简便性为多个目标部署。Qt 支持所有主要的桌面操作系统,包括 Windows,Mac OS X 和 Linux。嵌入式操作系统包括嵌入式 Linux、Windows 嵌入式以及最广泛部署实时操作系统的嵌入式设备——VxWorks、Neutrino 和 INTEGRITY和流行的移动操作系统等等。Qt WebKit 2 集成浏览器引擎,允许轻松集成 web 内容和应用程序。它将使 HTML5 开发人员感觉轻松自如,基于 Qt WebKit 2,能够开发出兼顾响应能力和本地代码强大功能的混合应用。这些应用可以提供大量的动态内容。
只需要一个简单的重新编译,就可以直接迁移之前为 Qt4 开发的应用程序。
Qt6的技术概览
- Qt对用户的价值体现在哪里?
Qt已经成功应用与许多不同的行业,并且在不断的横向发展,Qt对用户的核心价值体现如下:
(1)跨平台特性,用户可使用一种技术,把一套代码部署到各种的桌面、移动和嵌入式平台
(2)可扩展性,覆盖了从低端的单用途设备到高端复杂的桌面应用程序和互联系统
(3)世界一流的API、工具和文档,简化了应用程序和设备的开发流程
(4)可维护性、稳定性和兼容性,轻松维护大型代码库
(5)拥有超过100万用户的大型开发者生态
新版本的Qt需要我们进行一些调整以适应新的市场需求,同时也要把上述5个价值观作为我们工作的核心内容。 桌面应用是Qt的基础,也是Qt得以成长和强大的市场,桌面应用是我们大多数用户第一次接触Qt的地方,也是组成Qt工具链的基础。保持桌面应用的健康和成长是在其他市场也保持增长的先决条件。 嵌入式和互联设备是我们增长最快的领域。触屏设备的数量正在以指数级增长,但这些设备的硬件价格却承受着巨大压力。低端芯片组,单片机,结合中小型触摸屏的设备将无处不在。这些设备中的大多数都是功能相对简单的,但它们都需要精致流畅的用户界面。因此我们需要确保我们的产品能够瞄准这个空间,从而实现我们的可扩展的承诺。 与此同时,高端设备的用户界面的复杂性将继续增加,它们往往包括了数千个不同的屏幕和许多的应用程序。将2D和3D元素合并到一个用户界面也是很常见的,增强和虚拟现实的使用也是如此。 人工智能的元素将更广泛地应用于应用程序和设备中,我们需要有简单的方法来集成这些元素。 正在创建的互联设备数量的强劲增长,以及对用户体验的更高要求,使得我们更有必要专注于开发全球领先的工具,以简化应用程序和设备的创建流程。将UX设计人员集成到开发工作流中是我们的目标之一,但是我们还需要在许多其他领域去尝试进一步简化用户的工作。 Qt 6将是Qt的一个新的重大版本,这个版本的主要目标是为2020年以后的需求做好准备,在此次过程中我们将对代码库进行整理,使其更容易维护。重点将放在Qt中那些需要调整软件架构的部分,但是如果不破坏与Qt 5.x兼容性,那这部分就无法完成。 为了适应未来几年的需求,下面是我们会对Qt进行的的一些关键性修改。
- 新一代的QML
QML和Qt Quick是过去几年推动Qt增长的主要技术。使用这些技术可以直观的创建用户界面是我们产品的一个独特卖点。 QML是为Qt 5创建的,但是它有一些问题和限制。这也意味着它可以大幅改进,我们计划在Qt 6中实现这些改进。我们计划如下: 引入强类型。弱类型使得用户很难对他们的代码库进行大的更改。一个强大的类型系统允许IDE和其他工具帮助用户完成这项任务,并极大地简化了维护成本。此外,它还有助于我们生成性能更好的代码和减少相关开销。 JavaScript成为QML的一个可选特性。使用QML时使用完整的JavaScript引擎会提升复杂性,而且会引起性能上的开销,尤其是在单片机等低端硬件上,性能开销更加明显。然而,这个特性在许多其他应用场景中非常有用。 去掉了QML的版本控制。通过简化QML中的某些查找规则并更改上下文属性的工作方式,我们可以消除QML中的版本控制。反过来,这将大大的简化QML引擎,极大地简化我们维护Qt Quick的工作负担,并为用户简化QML和Qt Quick的使用流程。 删除QObject和QML之间重复的数据结构 目前我们的元对象系统和QML之间有相当多重复的数据结构,这些重复的数据结构会降低启动性能,增加内存使用量。通过统一这些数据结构,我们能够减少许多开销。 避免运行时生成数据结构。这与上面的一点有关,其中许多重复的数据结构目前都是在运行时生成的。其中大多数完全有可能在编译时生成。 支持把QML编译成高效原生的C++代码。通过强大的类型和更简单的查找规则,我们可以将QML转换为高效原生的C++代码,从而显著提高运行时性能 支持隐藏实现细节。为了能够在QML组件中隐藏数据和功能,对方法和属性进行“私有化”一直是一个长期的需求。 更好的工具集成。我们当前的QML代码模型时常不完整,这使得重构和在编译时检测错误变得困难甚至不可能。通过上述更改,应该能够提供与C++相媲美的编译时诊断以及大幅改进的重构支持。
- 下一代图形
自从Qt 5.0以来,图形领域发生了很多变化,这导致我们不得不对图形栈进行重大更改,以保持其竞争力。 在Qt 5中,我们统一使用OpenGL作为3D图形的API。从那时起,产生了许多新的API。在Linux上Vulkan是OpenGL的指定接班人,苹果正在推动Metal的发展,而微软有Direct 3D。这意味着Qt将来必须与所有这些API无缝地衔接。为了实现这一点,必须定义一个新的图形抽象层的API(类似于平台集成层的QPA),称为渲染硬件接口(RHI)。我们需要将所有的渲染基础设施(QPainter、Qt Quick Scenegraph和我们的3D支持)建立在该层的基础之上。 不同图形API的合成也导致我们必须支持不同的着色语言。Qt着色器工具模块将帮助我们在编译和运行时交叉编译着色器。 3D正在扮演越来越重要的角色,而我们目前的产品还没有一个统一的解决方案来创建同时包含2D和3D元素的UI。目前,将QML与Qt 3D或3D Studio中的内容集成是很麻烦的,并且会导致一些性能开销。此外,在2D和3D内容之间进行逐帧的动画同步和转换还没有办法做到。 3D内容与Qt Quick新的集成方式就是为了解决这个问题。在这种情况下,一个全新的渲染器将允许同时渲染2D和3D内容,并支持两者之间的任意嵌套。这将把QML转换为3D UI的UI定义语言,并且不再需要UIP格式。我们将提供一个新的技术预览版本的Qt Quick与3D支持的版本,它已经包含在了Qt 5.14中,更多的信息将会在一个单独的博文中进行说明。 最后,新的图形栈需要强大的图形素材处理的支持,它能在编译时根据目标硬件预处理这些素材并在需要时使用。比如将PNG文件转换为压缩纹理格式,将许多文件编译为纹理图集,将着色器和网格转换为优化的二进制格式等等。 我们还打算为Qt 6引入统一的主题样式引擎,这将允许我们在桌面和移动平台上获得Qt Widgets和Qt Quick的原生外观。
- 统一并且一致的工具库
我们创建用户界面的图形工具已经被一分为二,包括Qt 3D Studio和Qt Design Studio。此外,Qt 3D Studio与Qt的其余部分有些脱节,导致了相当多的重复工作。 我们通过将Qt 3D Studio所需的功能合并回Design Studio来统一这些功能。Design Studio与Qt Creator共享了大量代码和应用/插件框架,提供了很好的设计体验,并为我们提供了在设计师和开发者之间搭建桥梁的工具。 设计工具还需要与Photoshop、Sketch、Illustrator、Maya、3D Max等内容创建工具进行良好的集成。 开发者工具需要大量的投入,这样我们才能提供对C++、QML和Python等提供最佳的支持。提供统一工具还意味着开发人员可以很容易地使用Qt Creator中的设计功能,而UX设计者可以从开发者工具的特性(如编译项目或在设备上测试)中获益。 QMake作为Qt 5中使用的构建系统有很多缺陷和限制。对于Qt 6,我们的目标是使用CMake作为标准的第三方构建系统来构建Qt。到目前为止,CMake是C++世界中使用最广泛的构建系统,我们迫切需要更好地与它集成。在QMake上我们将继续支持用户,但不会对其进一步开发或用来构建Qt框架本身。
- 增强已有的C++ API
C++在过去的几年中发生了很大的变化。虽然Qt 5.0必须以C++ 98为基础,但现在Qt 6可以依赖C++ 17。这意味着C++提供了更多的开箱即用的功能,这在我们使用Qt 5时是没有的。我们使用Qt 6的目标是更好地集成这些能力,同时也保持向前的兼容性。 Qt 6中,我们希望把QML和Qt Quick的一些功能引入到C++中。我们致力于为QObject及其相关类引入一个新的属性系统,将QML中的绑定引擎集成到Qt的核心中,并使其在C++中可用。新的属性系统和绑定引擎将显著降低绑定的运行时开销和内存消耗,并使它们可用于Qt的所有部分,而不仅仅是Qt Quick。
- 语言支持
在Qt 5.12中,我们引入了对Python的支持,并通过Qt为WebAssembly添加了浏览器作为新的平台。在发布6.0之后,保持并进一步扩展跨平台特性将是Qt 6系列的一个重要部分。
- 兼容Qt 5和增量改进
与旧版本的兼容性是非常重要的,也是我们开发Qt 6时的主要需求。用户已经使用我们的框架编写了数十亿行代码,因此,我们所做的任何不兼容的更改都会给用户带来额外的成本。此外,对Qt 6的更改要求用户做的工作越多,用户升级的速度就会越慢,这将导致维护Qt 5的最后一个版本的成本更高。 因此,在用户代码中我们应该避免触发编译时或运行时错误进而使得Qt运行崩溃。如果我们必须破坏兼容性,编译时错误比运行时的静默破坏更可取(因为后者更难检测)。 当我们确实需要删除Qt的某些废弃部分,那么我们必须要确保它不会影响用户需要的部分,大部分用户都在使用的关键功能,比如Qt Widgets和其他部分毫无疑问必须保留。 我们正在计划对核心类和功能进行许多在Qt 5中无法实施的增量改进。我们的目标是保持完整的源代码兼容性,但是由于我们可以打破Qt 6的二进制兼容性,我们可以做很多在Qt 5中无法完成的清理和改进。 除了这些,我们还将对Qt 6进行其它的清理。我们将删除Qt 5中已经废弃的大部分功能(函数、类或模块)。从长远来看,这种清理将有助于节省开发人员的时间,并允许我们把更多的精力放在维护和编码上。 然而,对弃用部分的移植需要尽可能的简单,我们的用户可以完美地使用Qt 5.15 LTS增量地完成这一工作。我们的目标应该是Qt 6与Qt 5.15 LTS足够兼容,这样就可以轻松地维护一个可以同时针对两个版本编译的大型代码库。
- 市场和技术产品结构
除了改进Qt框架和工具,我们的目标是为组件和开发工具创建一个新的市场。这个方向将面向开发、设计应用程序和嵌入式设备的直接使用者,而不是面向最终用户。因此,它将成为Qt生态系统的一个凝聚中心。它将为第三方厂商提供一个发布Qt扩展组件的场所,扩展可以是免费或商业的。 Qt在过去的几年里增长良多,当前最重要的任务就是发布一个新版本。在Qt 6中,我们有机会重组我们的产品,并将必要的框架和工具打包为一个更小的核心。我们将利用应用市场来交付我们的附加框架和工具,而不是作为与核心Qt产品紧密耦合的捆绑包。这将使我们在何时交付以及如何交付方面具有额外的灵活性,并允许我们为某些附加组件解耦发布计划。