购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 Qt概述

Qt是一个跨平台的应用程序和UI开发框架。使用Qt只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统编译部署这些应用程序。Qt默认的IDE(Integrated Development Environment,集成开发环境)是Qt Creator,它是一个全新的跨平台Qt IDE。Qt Creator是由Qt构建的,可单独使用,也可与Qt库和开发工具组成一套完整的SDK(Software Development Kit,软件开发工具包),其中包括高级C++代码编辑器、项目和生成管理工具、集成的上下文相关的帮助系统、图形化调试器、代码管理和浏览工具等。Qt本身是一个C++开发框架,前期只有C++ Widgets一种开发技术,直到Qt 4.7引入了一种高级用户界面技术Qt Quick,该技术更便于开发人员和设计人员协同创建动态触摸式用户界面和应用程序。

1.1.1 Qt的历史

1995年,挪威的奇趣科技公司(Trolltech)的两位创始人Haavard Nord和Eirik Chambe-Eng合作开发了Qt框架,并于当年5月发布了Qt第一个公开版本。初版Qt只有两个版本:适用于类Unix平台的Qt/X11和适用于Windows平台的Qt/Windows。

2001年年底,奇趣科技发布了Qt 3,增加了对macOS X平台的支持。2005年6月,奇趣科技发布了Qt 4。这是一个全新的版本,与之前的3.x系列不仅二进制不兼容,甚至API也不兼容。

2008年6月,诺基亚宣布完成对Trolltech的收购。同年,诺基亚将Qt的名字更改为Qt Software,然后又更改为Qt Development Framework。在诺基亚的领导下,Qt的工作重心由桌面系统转移至诺基亚旗下的手持设备。2009年5月11日,诺基亚宣布Qt源代码在著名的Git托管平台Gitorious面向公众开放,这标志着Qt正式成为面向社区的开源框架。

2009年3月,Qt 4.5发布,这是Qt被诺基亚收购后发布的首个全新版本,同时发布的还有全新的跨平台集成开发环境Qt Creator 1.0。另外,Qt还首次提供了可与现存的商业授权和GPL授权并行的LGPL授权。2009年12月,Qt 4.6发布,首次包含了对Symbian平台的支持。2010年9月,Qt 4.7发布,引入了一种全新的高级用户界面技术Qt Quick和一种声明式编程语言QML,用于为移动和嵌入设备创建动态触摸式用户界面和轻量级应用程序。

2011年2月,诺基亚宣布放弃自己的Symbian平台,转而投向微软公司的Windows Phone平台。2011年3月,Digia(一家总部位于芬兰的IT业务供应商)与诺基亚公司签署协议,收购Qt商业许可证和服务业务。2012年,Digia从诺基亚收购Qt软件技术和Qt业务。收购完成后,Digia负责之前诺基亚开展的所有Qt业务,包括研发、商业许可证、开源许可证和专业服务等业务。Digia宣布将努力促使Qt支持Android、iOS和Windows Phone三大平台,并且继续关注桌面和嵌入式平台的开发。这意味着Qt正在努力成为一个全平台的开发框架。

2012年12月,Qt 5正式发布,这是继Qt 4之后的另一个大的升级。Qt 5引入了全新的硬件加速图形处理,并且将QML和Qt Quick提升到与C++等同的地位。传统的基于C++的Qt Widgets仍将继续获得支持,但是全新的架构所带来的性能提升则更多作用于QML和Qt Quick。

2014年,Qt公司在Digia内部成立。2016年,Digia公司分拆业务,与Digia的Qt业务相关的所有资产、负债和责任都转移到了新设立的Qt公司。分拆后,Qt公司成为独立的上市公司。

2020年12月,Qt 6.0正式发布。为了适应不断发展的新技术和新需求,Qt 6在利用C++17、下一代QML、新的图形架构、Qt Quick统一2D和3D、完全支持CMake等核心重点领域进行了大量改进,目标是让Qt成为未来的生产力平台。早期的Qt 6版本在一些功能上并不完善。2021年9月,Qt 6的第一个长期支持版本Qt 6.2 LTS发布,这是第一个推荐入门使用的Qt 6版本。

1.1.2 Qt的特色

作为一个跨平台的应用程序开发框架,Qt 6系列和Qt庞大的生态系统为微控制器(MCU)到超级计算机等各种硬件、操作系统或裸机,提供了整个产品线的设计和原型实现、开发和编码、调试和测试、部署和维护等所需的一切。整体来说,Qt主要具有如下特色。

支持跨平台开发:Qt可以“一次开发、任意部署”,可以在Linux、Windows或macOS上设计、开发一套代码,然后交叉编译到各种操作系统或裸机上进行部署,目标平台包括桌面平台(Linux/X11、macOS、Windows)、移动平台(Android、iOS)、嵌入式平台(Android Automotive OS、webOS OSE、嵌入式Linux、实时操作系统INTEGRITY和QNX)、Web平台(WebAssembly)等。

配套工具齐全:Qt拥有众多全流程的设计开发工具,可以为项目简化每一步工作流程。不仅有可供设计师和开发者无缝协作的Qt Design Studio,还有跨平台的集成开发环境Qt Creator,可以帮助用户编写代码,完成构建、编译、本地化等任务。另外,Qt还有众多质量管理工具和部署工具,能够为整个软件生命周期提供全面保障。

拥有丰富的API:Qt包含一整套高度直观、模块化的C++库类,拥有丰富的API,可简化应用程序的开发。Qt具有跨平台的基本组件和功能全面的扩展模块,涉及图形界面、网络、数据库、音视频、3D、图表、XML、数据可视化、Web等众多领域。Qt能生成高可读性、易维护和可重用的代码,具有较高的运行效率,且内存占用小。

支持多种语言:Qt支持不同的开发语言,包括C++、QML和Python等。基于C++的Qt Widgets用于创建复杂的桌面应用程序;而基于声明式UI语言QML的Qt Quick用于创建流畅、动态的移动触摸界面程序,还可以使用JavaScript进行逻辑业务描述;Qt for Python可以通过Python进行Qt程序开发。

开源且永不过时:Qt根植于开源,其开源社区由全球150多万名开发者组成。Qt的成功部分归功于其强大的社区,社区通过发现和修复bug,并通过共享其软件开发项目的各种特性来添加Qt代码库,从而提高了开发框架的质量。强大且活跃的社区让Qt蓬勃发展,使得Qt生态系统可以为项目的未来保驾护航。

1.1.3 Qt软件开发框架介绍

Qt包含一整套高度直观、模块化的C++类库,拥有丰富的API,可简化应用程序的开发。Qt的模块可以分为Qt基本模块(Qt Essentials)和Qt扩展模块(Qt Add-Ons),整个开发框架如图1-1所示。

图1-1 Qt软件开发框架示意图

Qt基本模块定义了Qt在所有平台上的基本组件,在所有Qt支持的开发平台和经过测试的目标平台上都可以使用。其中的API和库是Qt的基石,相关模块如表1-1所示。

表1-1 Qt基本模块

Qt是一个涉及众多领域的全面框架,除了基本模块,还包含了许多扩展模块,旨在为使用者提供真正的专业开发体验。Qt包含数十种扩展模块,常用的一些扩展模块如表1-2所示。

表1-2 Qt常用的扩展模块

1.1.4 Qt的授权

对于应用程序开发,Qt提供了商业和开源许可证下的双重许可证。商业许可证包含了根据自己的条件创建和分发软件的全部权利,无须承担任何开源许可义务,还可以获得官方的技术支持。Qt也可以在GPL和LGPLv3开源许可证下使用,不过,Qt工具和一些库仅在GPL下可用。Qt开源许可非常适合开源项目、学术目的或者学生学习使用等项目。用户可以在Qt官网查看Qt授权的详细信息,也可以在安装Qt时查看LGPLv3等许可证的详细内容。

1.1.5 Qt Quick和QML介绍

Qt Quick作为一种新的界面技术,已经经过了十几年的发展。对于初学者而言,其实只需要学习最新版本的Qt Quick即可。不过为了避免被一些以前的术语或概念影响,读者可以先了解一下Qt Quick的由来和发展过程,今后如果看到一些相关名词,知道其作用即可。

1.由来和发展

自2005年Qt 4发布以来,Qt已成功在桌面和移动系统开发了众多应用。但是随后几年,计算机用户的使用模式发生了翻天覆地的变化:用户逐步从使用固定的PC转换到使用便携式计算机和现代移动设备。传统的桌面系统被越来越多的触屏式智能手机和平板电脑所取代,经典的窗口界面时代已经成为过去。使用Qt的经典C++代码实现兼容不同大小屏幕的程序变得愈加困难。在这样的背景下,急需一种全新的界面开发工具适应现代化界面开发工作。

Qt 4被设计用来开发适用于所有主流平台的桌面应用。为了给所有的主流桌面和移动系统提供基于触摸的现代化用户界面,从2010年发布的Qt 4.7开始引入了Qt Quick技术。当时对Qt Quick的定义为:“一种高级用户界面技术,可以轻松创建供移动和嵌入式设备使用的动态触摸式界面和轻量级应用程序。”Qt Quick主要由一个改进的Qt Creator IDE(其中包含了Qt Quick设计器)、新增的简单易学的QML(Qt Meta-Object Language,Qt元对象语言)和新加入Qt库中名为QtDeclarative的模块等三部分组成。这些使得QML更方便不熟悉C++的开发人员和设计人员使用。

Qt 4中,QML应用使用图形视图框架渲染;Qt 5则改为使用更先进、性能更好的OpenGL场景图架构。由于渲染架构的改变,Qt 5废弃了QtDeclarative模块,将所有Qt Quick的内容划分为两个相对独立的模块:Qt QML和Qt Quick。基于兼容性目的,QtDeclarative模块一开始并没有完全移除,而是被移动到新的Qt Quick 1模块中。这个模块只是为向前兼容而存在,到Qt 5.6发布时已经被彻底移除。相对于Qt Quick 1,Qt 5中的Qt Quick模块是2.x版本,所以也被称为Qt Quick 2。

2.Qt 6中QML的概念

QML是一种用于描述应用程序用户界面的声明式编程语言,它使用一些可视组件以及这些组件之间的交互和关联来描述用户界面。QML是一种高可读性的语言,可以使组件以动态方式进行交互,并且组件在用户界面中可以很容易地实现自定义和重复使用。QML允许开发者和设计者以类似的方式创建具有流畅动画效果、极具视觉吸引力的高性能应用程序。

QML提供了一个具有高可读性的类似JSON的声明式语法,并提供了必要的JavaScript语句和动态属性绑定的支持。QML语言和引擎框架由Qt QML模块提供。Qt QML模块为QML语言开发应用程序和库提供了一个框架,它定义并实现了语言及其引擎架构,并且提供了一个接口,允许应用开发者以自定义类型和集成JavaScript、C++代码的方式来扩展QML语言。Qt QML模块提供了QML和C++两套接口。

3.Qt 6中Qt Quick的概念

广义上来说,Qt Quick是Qt中基于QML语言的一种用户界面技术的统称,它是QML、JavaScript和C++等多种技术的集合。具体来说,在Qt框架中Qt Quick模块是QML类型和功能的标准库,包含了可视化类型、交互类型、动画、模型、视图、粒子特效和渲染特效等。

在QML应用程序中,我们可以通过一个简单的import语句来使用Qt Quick模块提供的所有功能。Qt QML模块提供了QML的引擎和语言基础,而Qt Quick模块提供了QML创建用户界面所需的所有基本类型。Qt Quick模块提供了一个可视画布,并提供了丰富的类型,用于创建可视化组件、接收用户输入、创建数据模型和视图、生成动画效果等。Qt Quick模块提供了两种接口:使用QML语言创建用户界面的QML接口和使用C++语言扩展QML的C++接口。使用Qt Quick模块,设计人员和开发人员可以轻松地构建流畅的动态式QML用户界面,并且在需要的时候将这些用户界面连接到任何C++后端。

从Qt 5.7开始,Qt Quick引入了一组界面控件,使用这些控件可以更简单地创建完整的应用界面。这些控件包含在Qt Quick Controls模块中,包括各种窗口部件、视图和对话框等。 71gq69msc4UITC8V3Na6HTtLJcuqivC+0NjVHyhveVmwoVuCIP2Mb3PJovOwCdhu

点击中间区域
呼出菜单
上一章
目录
下一章
×