Qt 5编程入门的原型是网络上的一系列Qt博客教程,是该系列教程衍生出的第三本。2012年出版的《Qt Creator快速入门》和《Qt及Qt Quick开发实战精解》至今已经有两年多的时间,在这期间Qt的命运发生了翻天覆地的变化。2012年8月,诺基亚将Qt出售给同在芬兰的Digia公司,后者致力于发展Qt的商业授权用户,同时提供了Qt社区的良好运行环境。伴随着Qt Project(qtproject.org)的成立,Qt本身的开发终于成为一个真正的开放源代码项目。之后的Qt 5发布,使得Qt已经开始支持包括Windows、Linux、Mac OS X、Android、iOS、BlackBerry、Sailfish等在内的十几个桌面和移动平台。我们看到Qt的身世一波三折,但是又有足够的理由相信Qt的未来会越来越好。
因为在博客中发表Qt教程,所以认识了很多Qt爱好者和普及者,其中包括本书的另外一名作者程梁(网名豆子、devbean)。豆子与我的经历类似:我从2009年开始在百度博客上编写Qt Creator系列教程,因为图文并茂,简单易懂,所以得到了众多网友的肯定;而豆子也从2009年开始,在51 CTO博客中推出Qt学习之路系列教程,因为讲解细致,拥有自己的独到见解,所以受到了广大网友的热捧,后来被51 CTO专题收录,现在总浏览量已有数百万。后来我从百度博客迁移到自己的yafeilinux.com个人博客,而豆子也从51 CTO博客转移到自己的个人博客网站devbean.net。有着如此相似经历的两个人走到一起会发生什么呢?就是组建了更符合网友需求的Qter开源社区(qter.org)。这个社区一直在发展,我们的目标就是要为各位致力于学习Qt的朋友提供一个便捷之门。
随着Qt 5的发布,我们经常可以在论坛上看到需要Qt 5相关教程和书籍的朋友。Qt 5的全新框架、Qt Quick 2 技术以及最新版本的 Qt 提供了对现在非常流行的Android和iOS等移动平台的支持,都使得现在想要学习Qt的读者数量剧增。现阶段国内外图书市场上极少有关于Qt 5的书籍,但是却拥有众多需要该类书籍的初学者和开发者。为了解决这个矛盾,我和豆子决定再做一次第一个吃螃蟹的人,从而有了本书。
Qt的历史
Qt是由奇趣科技公司(Trolltech)的两位创始人Haavard Nord和Eirik ChambeEng合作开发而成的,首个版本完成于1991年,而第一个商业版本则是在1995年才正式推出。
Qt的名字来源于一个有趣的故事。当时这个工具之所以取名为Qt,是因为在Haavard的Emacs字体中,字母Q看起来非常漂亮;而字母t的灵感则来源于当时的另外一个工具Xt(X toolkit)的取名。
最初Qt只有两个版本:适用于类Unix平台的Qt/X11和适用于Windows平台的Qt/Windows。其中,Windows版本只有专利授权,这意味着如果需要将使用Qt/X11编写的开源应用移植到Windows平台,必须购买专利授权。
2001年底,奇趣科技发布Qt 3.0,从这个版本起,Qt增加了对Mac OS X平台的支持。不过,直到2003年6月之前,Mac OS X版本的Qt也只有专利授权。当Qt 3.2发布的时候,奇趣科技才增加了Mac OS X平台的GPL授权。
2005年6月28日,奇趣科技发布了Qt 4.0。这是一个全新的版本,与之前的3.x系列不仅二进制不兼容,甚至API也不兼容。这在一定程度上使人颇有微词。
2008年6月17日,诺基亚公司宣布以公开竞购的方式收购奇趣科技,连同奇趣科技旗下的Qt。同年,诺基亚将Qt的名字更改为Qt Software,然后又更改为Qt Development Framework。在诺基亚的领导下,Qt的工作重心由桌面系统转移至诺基亚旗下的手持设备。2009年5月11日,诺基亚宣布Qt源代码在著名的git托管平台Gitotious面向公众开放,标志着Qt正式成为面向社区的开源框架。不过,尽管诺基亚承诺Qt开放源代码,但事实上Qt的代码提交与维护仍然牢牢掌握在诺基亚手中。2009年12月1日,Qt 4.6发布,这是第一个移植到Symbian S60平台的版本。
2011年2月,诺基亚宣布放弃自己的Symbian平台,转而投向微软公司的Windows Phone平台。一个月之后,诺基亚宣布将Qt的商业授权和专业服务出售给Digia公司。后者启动了Qt Project,同时宣布将努力促使Qt支持Android、iOS和Windows Phone三大平台,并且继续关注于桌面和嵌入式平台的开发,这意味着Qt正在努力成为一个全平台的开发框架。现在看来,在一定程度上,Digia的确做到了这一点。
Qt 4之后的下一个大的版本Qt 5原计划于2012年6月发布,但是由于诺基亚的政策调整和出售Qt的缘故,直到2012年12月19日,Qt 5.0才正式发布。这是继Qt 4之后另一个大的升级。表面看来,Qt 4到Qt 5的改动并不比Qt 3到Qt 4来得激进,但是Qt 5引入了全新的硬件加速图形处理,并且将QML与JavaScript提升到同C++相等的地位。传统的基于C++的Qt Widgets仍将继续支持,但是全新的架构所带来的性能提升则更多作用于QML和JavaScript。
值得一提的是,Qt 5的开发真正由Qt Project社区驱动,现在Qt已经允许诺基亚和Digia之外的开发人员提交并审核代码。
Digia接管Qt业务以后,Qt的开发速度有了明显提升。2013年7月3日,Qt 5.1发布。Qt 5.1除了修改5.0版本的bug之外,更带来了Android和iOS平台的实验性支持。2013年12月12日发布的Qt 5.2版本,则正式引入对Android和iOS平台的支持;同时,Qt 5.2引入了一个新的场景图像渲染器,针对OpenGL后端提升了矢量绘制的性能,将GPU的占用降至最低。2014年5月20日,Qt 5.3发布。Qt 5.3改进了对iOS平台的支持,并且开始支持WinRT平台。这为Qt成为全平台的开发工具更进一步。
Qt授权
Qt的授权一直比较复杂,既包括商业授权,又包括开源授权,并且不同版本之间的授权并不一致。下面我们来详细介绍下有关授权的问题。
首先需要说明的是,Qt自发明以来一直都有一个商业授权。这个商业授权允许开发者开发专有程序。同时,Qt商业授权除了包含Qt开源版的一切功能外,还包括一些企业应用的组件,比如Qt Charts、Qt Data Visualization等;还有Digia公司支持的Qt培训等内容。
真正复杂的是Qt开源授权。Qt 1.45之前,Qt的源代码一直遵循FreeQt协议。该协议既不符合Open Source Initiative定义的开放源代码原则,也不符合Free Software Foundation定义的自由软件。在此协议下,Qt的源代码虽然可用,但是并不允许重新发布修改过的版本。
1998年,基于Qt的KDE成为Linux最流行的桌面环境之一。不过,因为Qt协议的问题,很多人担心这将给KDE桌面环境的发展带来影响。这也正是日后Qt协议问题的根源之一。
Qt 2.0的开源授权由FreeQt更改为Q Public License(QPL)。这是一个自由软件协议,但是与GPL不兼容,而后者才是Linux遵循的协议。作为妥协,KDE团队与当时的奇趣科技达成协议,即使奇趣科技濒临破产,也不能使Qt的协议比QPL更加专有。直到2000年,Qt/X11 2.2正式以GPLv2协议发布,才终结了这一授权的法律问题。
2002年,KDE on Cygwin项目开始将GPL授权的Qt/X11移植到Windows平台。此时,Windows平台还没有一个开源版本的Qt。不过,该项目并没有取得成功,但却直接导致奇趣科技在2005年6月将Qt/Windows 4以GPL授权的形式发布。至此,Qt 4在全部主流桌面平台都有了基于GPL协议的开源版本。随着GPLv3发布,Qt又增加了具有额外条款的GPLv3协议。这个“额外条款”允许将Qt编写的最终应用程序以不兼容GPL的自由软件/开源协议发布。
虽然此时的Qt已经有了自己的开源版本,但是作为一个类库,使用GPL协议开源具有一定的危险性。由于GPL的传染性,GPL不允许发布闭源程序。这种协议将极大地限制Qt在商业软件领域的应用。所以在2009年1月14日,Qt 4.5终于众望所归地增加了LGPL协议,允许使用Qt开发闭源程序。
尽管历史很复杂,但是我们的结论很简单:最新的Qt 5.3版本使用两种协议发布——商业协议和LGPL 2.1。
本书特色
本书是经典的Qt应用编程系列丛书继《Qt Creator快速入门》和《Qt及Qt Quick开发实战精解》之后的又一力作,是市面上为数不多的全面介绍Qt 5、QML和Qt Quick的入门书籍。与其他相关书籍最大的不同之处还包括,本书是基于网络教程的。综合来说,本书主要具有以下特色:
最新。本书基于最新的Qt 5.3.0和Qt Creator 3.1.1版本进行编写,Qt 5.3.0是Qt 5的最新的稳定版本。
基于社区。本书以Qter开源社区为依托,由社区站长合作完成。读者可以通过论坛、邮件、QQ群等方式和作者零距离交流。
无限更新。本书对应的网络教程是无限更新的,本书已经是该网络教程衍生的第三本书了。
全新风格。本书力求以全新的视角,引领开发者进行程序代码的编写和升级,同时以初学者的角度进行叙述,每个小知识点都以一个完整的程序来讲解。尽量避免晦涩难懂的术语,使用初学者易于理解的平白的语言编写,目标是让初学者在快乐中掌握知识。
授之以渔。在整书的编写过程中,都是在向读者传授一种学习方法,告诉读者怎样发现问题、解决问题,怎样获取知识,而不是向读者灌输知识。本书的编写基于Qt参考文档,所讲解的知识点多数是Qt参考文档中的部分内容,大家在学习时一定要多参考Qt帮助文档。在本套书籍讲解的所有知识点和示例程序中,都很明显地标出了其在Qt帮助中对应的关键字,从而让读者对书中的内容有迹可循。
本书结构
本书着重讲解Qt 5中QML和Qt Quick的编程知识,首先对Qt 5进行了整体介绍以及如何从Qt 4项目移植到Qt 5的介绍,然后讲解了QML语法和Qt Quick的基础内容,后面的几章讲解了Qt Quick在图像特效、绘画、多媒体、数据显示和处理等方面的高级应用。全书的目录结构如下表所列。