前言
为什么写作本书
今年(2014年)4月份,我开始写作《Qt on Android核心编程》,该书主要讲述Qt on Android的核心技术,比如信号与槽、元对象系统、Qt与Android的衔接、Android相关的开发主题等,对于界面开发,还是基于Qt传统的Widgets。
在写作的过程中,不断有技术同仁向我咨询Qt Quick的问题,有诸如对象如何声明、怎样定义函数等入门级的问题,也有QML与C++如何交互、如何定制ListView等进阶问题……于是我想,为什么大家关注Qt Quick与QML?结论很简单,正如Qt Quick的名字一样,用它来开发界面,真是飞一般的感觉;更让人快感迭起的是,Qt Quick里的绝大多数界面元素,都可以定制,都是任人装扮的小姑娘,甚至还可以从头开始快速构建专属于你的界面组件;还有顶顶重要的是,QML与Qt C++的完美结合为开发者带来了无与伦比的灵活性。
但是限于篇幅,这些精彩不能够在《Qt on Android核心编程》一书中介绍。于是我决定另写一本专门讲述Qt Quick的书籍,而且定位在入门层面,因为我本人也才入门而已。
Qt5之后,Qt Quick与Qt Widgets并驾齐驱,成为Qt界面技术的双飞翼。而介绍Qt Quick本身的技术资料、书籍却少之又少。搜遍互联网,也很难找到系统介绍Qt Quick的文章,多数是开发者使用某个主题后的片段记录与日志。即使这些宝贵的经验片段,也因为Qt Quick版本的问题而不一定能够正常使用。更可惜的是,Qt Quick适用于Android等移动平台,而这方面的资料和实践,却更加芳踪难觅。所有这一切,既给我的学习增加了困难,也坚定了我写一本Qt Quick入门书籍的决心。
做出这个决定的过程也颇为艰难,因为写作《Qt on Android核心编程》给我和家人的生活带来了非常大的影响。独自完成一本书是一项非常浩大的工程,工作量不说,所花心思是极多极难量化的:你会担心选取的主题、角度是否合适,你提供的示例不仅要在语法和运行层面上正确,还要思量它是否能恰到好处地演示你讲解的主题……而在你念兹在兹、废寝忘食、心无旁骛、形容枯槁地琢磨着写作时,你也忽略掉了身边的老婆、孩子、亲友,你整天都在飘啊,挺奇怪的感觉,干什么事儿都是人在心不在,这样的你,对身边亲友的影响可想而知。我刚刚从这种状态中出来,还未及好好地放松几天,就又决定重开炉灶,锻铸新兵,对于我的老婆、孩子,都是很难启口之事。可是我又担心一旦放下当前火热的念头,哪天想重新来过时,却激情不再冷灰难燃。于是我偷偷地开始了这项工作,直到进行了将近一半时,才告诉老婆,相信她能理解,而她也确实理解并支持我,她是我最该感谢的人。
写作本书的过程,也是我学习的过程,书中多数章节都来源于我在自学时记录的笔记和完成的示例。对于我遇到的困惑,对于那些让我辗转反复难以理解的主题,我特意将这个主题本身、它牵涉到的其他主题、它需要的基础知识都一一记录下来,能放在一起讲解的尽量放在一起,需要独立成章的,也费尽心思安排前后顺序。可以说,这本书是我在Qt Quick这条路上练级打怪的备忘录。
每当完成一个章节、一个示例时,我都感到由衷的高兴,可也感到莫名的失落:就快要结束了……当初《Qt on Android核心编程》完稿时,我就对这种爱女远飞、空虚、落寞、失去凭借与寄托的感觉很不适应。而现在我再次经历着这一切,我其实希望这是一场没有终点的旅行,但,它不是。
我把这一切记录在这里,我想说,爱过,写过,失落过,高兴过,低徊过,迷惘过,不管怎样,我从未对那些流过的汗水、付出的精力后悔过,如果还有机会,我还愿意再这样走上一遭。
致谢
首先要感谢的,是本书的策划编辑高洪霞老师,没有她的支持和帮助,写作本书的旅程很难有机会成行。在写作过程中,高老师也给予了我很多关切以及中肯的建议,对本书的写作具有至关重要的意义。
我要特别感谢本书的文字编辑葛娜老师,她辛苦而卓有成效的工作,使得书稿更为整洁、漂亮。
还要感谢出版社以及本书的各位编辑,没有你们的辛苦付出和鼎力帮助,本书绝难顺利付梓出版。
接下来要感谢的,是我的老婆赵建媛女士,尽管她陪我经历了写作《Qt on Android核心编程》的恐怖旅程,但还是义无反顾地跟我踏上了新的征途。她宽容、大度、善解人意,毫不计较我的先斩后奏,在精神上和行动上给予我无限支持。我对写书心无旁骛,而对她的关心呈指数下降仿若移情别恋,但她依然微笑着陪我前行。没有老婆不抛弃、不放弃的支持,实在难以想象我可以再次完成“写作一本书”这样旷日持久、庞大浩繁的工程。
另外,还要感谢我美丽可爱的女儿安悦瑄小朋友,此时她已快五岁了(10月份生日),看到我又开始写书,她就问我之前的书什么时候可以出来,她想要一本,还说将来写书也给我一本。我们已经约定好了,就差拉钩上吊一百年不许变谁变谁是小狗啦。
特别感谢上海Qt开发联盟(QQ群号279906625)和Qt5for Android/iOS(QQ群号19346666)这两个群的群友们。真心感谢那些解答我疑问、帮我做试验的大神们,你们的大爱无疆与高风亮节帮助我避开了修炼Qt Quick这门高深武术时常见的各种走火入魔症状。由衷地感谢那些不断向我提问的Q友们,你们总能击中我的软肋,让我痛定思痛继续修炼始终不忘初心。
必须感谢所有在我写作期间对我嘘寒问暖、给予我帮助的朋友们,是你们让我觉得世界如春风如秋阳,温暖宜人,你们与神同在,光芒照耀四方。
最后,也最应该感谢的,是肯花费时间和精力阅读本书的读者,你们的意见和建议,我会视若珍宝并以之为鞭奋力前行。
本书适合谁
本书是专门讲述Qt技术中的Qt Quick框架的。Qt Quick可以作为一项独立技术而存在,只使用Qt Quick就可以构建功能丰富的应用。如果结合Qt C++,则可以让你肋生双翅,翱翔蓝天。
如果你从未接触过Qt而希望直接学习Qt Quick,没有任何问题,本书行文时已作考虑,以期自成一体,除了第11章以及部分混合使用QML与C++的示例,其他章节都不需要专门的Qt基础,也不需要专门的C、C++基础。正如书名所示,本书是Qt Quick的入门导引,是将其作为一门新语言、一项新技术来介绍的。
第2章从零开始,详细地介绍了Qt SDK的安装、Qt Creator IDE、基于Qt Quick的Hello World,还介绍了行走江湖必备的工具——Qt帮助和qmlscene。
第3章简要介绍了QML语言的入门基础,让你能够快速看懂、理解QML文档,能够自己动手做一些小实验。
第4章在Hello World的基础上分析了Qt Quick应用的基本程序结构,同时引入了对Window、Rectangle、Button、Text、Image等常见元素的介绍,读完这章,你已经可以完成一些有实际意义的应用软件了。
虽然第2~4章可以让你快速跨过Qt Quick的门槛,进入绚烂多姿的新世界,可它们也留下了很多疑问,因此我精心准备了第5章——ECMAScript初探,以便帮助你查漏补缺,建立坚实的QML基础。
如果你有C++基础,没有GUI编程经验,现在想开发跨平台的应用软件,那么本书可以帮助你达成愿望。选择Qt进行任何类型的软件开发都是十分明智的。你不但可以获得令人叹为观止的用户界面和非同凡响的性能,还能让它们运行在多种屏幕、设备、操作系统、平台上,这简直无法用语言形容。而Qt Quick,可以让你从容地从零开始这曼妙的旅程。
本书的第6~9章进一步带你熟悉Qt Quick,事件处理、更多的基础控件、动态加载控件、创建属于你自己的元素、在界面上合理安排众多的UI元素,有了这些进阶知识,你可以更为自如地打造你的应用了。
如果你已经能够熟练地使用Qt C++开发软件,有一定的GUI编程经验,现在想学习Qt Quick,想更加快速、高效地完成各种应用,本书也适合你,你会发现既有的经验可以让自己更快地熟悉Qt Quick的各种主题。比如第10章的Canvas、第11章的C++与QML混合编程、第12章的动画、第13章的Model/View、第14章的多媒体、第15章的网络,在Qt C++中都可以找到对应的主题……总之,有了Qt C++的基础,会事半功倍。
如果你已经有一定的Qt Quick基础,本书也可以帮助你巩固和完善既有的知识与经验,笔者相信本书提供的ECMAScript基础(第5章)、Qt Quick事件处理(第6章)、动画(第12章)、Model/View(第13章)、QML与C++混合编程(第11章)等,都是在别处很难获得的、相当详尽的系统性论述。
总之,本书针对以下读者群:
- 想开发GUI应用、有一定编程经验的开发人员。
- 熟悉C++或其他开发语言,熟悉面向对象程序设计的有经验的开发人员。
- 熟悉Qt C++,由于Qt Quick与Qt相关而想了解它的开发人员。
- 有一定的Qt Quick基础,想更好地了解它的初学者。
- 熟悉Qt Quick,想更好地了解各种主题细节的进阶开发者。
- 有特定平台开发经验,希望开发跨平台应用的开发者。
- 熟悉Web页面开发,现在需要开发本地应用的开发者。
- 有计算机基础,想学习GUI编程的爱好者。
那么,本书不适合谁呢?没有任何计算机科学基础背景、连办公软件都没用过、不能理解软件为何物的超级初学者,建议还是先找其他书籍看看。
你需要什么技术基础
Qt Quick是以Qt和ECMAScript为基础的,而Qt是基于C++的。
如果你有一点C++、Java、JavaScript或其他编程语言的基础而不熟悉GUI编程,学习本书可能会遇到一些挑战,但在你的努力之下,佛挡杀佛,鬼阻杀鬼,浴火重生,触手可及。
如果你既有面向对象语言基础,又有GUI开发基础,本书对于你来讲仅仅是举一反三、触类旁通的过程,你会享受到征服新大陆的快感。
如果你有Qt基础,那么学习本书将是非常愉快的旅程。
如果你想要进行Android开发,请先阅读笔者的《Qt on Android核心编程》,有了它,你会发现本书涉及Android的主题和示例都会变得面目可亲。
你需要什么软硬件环境
笔者使用Windows7作为开发环境,可供参考。
至于开发主机的硬件配置,笔者建议配置为:
- 双核以上CPU。
- 4GB以上内存。
而为了验证部分应用在移动设备上的效果,你还需要一部Android手机,系统版本在2.3以上。建议配置为:
- Android系统4.0及以上。
- 内存1GB以上。
- 4GB以上闪存或加配SD卡。
为了连接电脑和手机进行安装与调试,需要:
- 一根与手机匹配的数据线。
- 与手机匹配的ADB驱动。
术语表
作者在写作本书的过程中,不可避免地引用了部分英文术语以及缩写,为了不引起歧义,有必要把它们界定一下。
IDE:Integrated Development Environment ,集成开发环境,如Qt Creator、Visual Studio等。
GUI:Graphical User Interface ,指采用图形方式显示的计算机操作用户界面。笔者在行文过程中有时使用其简写GUI,有时 以图形用户界面 指代,有时也用UI替代GUI。
Application Framework :你可以将它理解为一个拥有诸多应用开发所需的基本功能(如程序模型、网络、XML、GUI组件等)的类库,开发人员只要从其中撷取符合自己需求的模块,就可以像搭积木一样完成自己的应用。我在书中有时称其为 应用框架、应用开发框架 ,视上下文环境而定。
API:Application Programming Interface 。系统或应用框架开放出来,给程序员使用的接口,就是API。它可以是C函数那样的东西,也可以是C++类,还可以是信号……
Android :一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。比较常用的中文对应词是 安卓 和 安致 。本书多数时候直接使用Android一词,有时使用安卓,有时还以Android指代开发它的公司和组织,视上下文而定。
SDK:Software Development Kit ,软件开发工具包。广义上指辅助开发某一类软件的相关文档、源码、范例和工具的集合,比如Qt SDK、Android SDK……
类(Class) :众多的具有相同属性和操作的事物的抽象,冷冰冰的模板,不会哭也不会笑,它存在的唯一目的,就是为了让开发者根据它创建对象。
对象定义 :ECMAScript中没有类的说法,只有对象定义,其实也是创建对象的模板,与类相近。本书很少用到它,一般使用“类”这个词。
对象(Object) :以某一个类为模板创建出来的具体化的事物,它有自己的属性、方法,是有血有肉的活物,一颦一笑,一举手一投足,各种风流韵味都是它自己的,正所谓龙生九子各个不同也。
实例化 :从类创建对象的过程,叫作实例化。
实例 :对象的同义词。本书有时使用对象,有时使用实例,因上下文而变。
鸡一嘴鸭一嘴
- 本书中多次提到Qt SDK路径和源码路径,使用了C:\xxx之类的字串,这都是基于作者的开发环境来讲的,你电脑上的路径,与你安装Qt SDK时的配置有关。
- 书中示例代码,有时因为排版的原因做了人为折行处理,导致部分代码看起来不符合ECMAScript的语法,如果你照录代码进行试验,请注意此点。
- 在非代码的段落,有时为了排版的原因,某些类名、变量名、英文字词可能会被插入空格。
- 示例代码中的部分很长的语句(如字符串、URL等)无法简单地折行,保持了自然本色,请你留意。
你看到的配图,是黑白的或者带点儿灰度,这是印刷的原因,如果你运行示例,看到的应该是彩色的。行文时笔者有时也会用到“蓝色矩形”之类的字眼,而如果你看到的是灰不溜秋的一坨色块,还请淡定,这都是月亮惹的祸。
联系作者
我非常乐意和本书的所有读者沟通,接受你对本书以及对我的指正和建议。
本书部分章节的初始版本曾经在我的技术博客上连载,欢迎访问我的技术博客,留下你对书籍内容本身或某个技术专题本身的指正和建议。我的博客地址:http://blog.csdn.net/foruok。
笔者目前担任CSDN Qt论坛的版主,你可以到那里找笔者讨论技术问题。你可以按下面的路线抵达那里:http://bbs.csdn.net→移动开发→Qt。
笔者经常在致谢中提到的两个Qt技术群内出没,你也可以在那里找到我。
笔者的电子邮箱是foruok@163.com,欢迎来信讨论与书籍相关的问题,如果要求我为你解决技术问题,咱们得先坐下来掰扯掰扯怎么按时计费的问题。