书海网短评:
适读人群:《Qt高级编程》主要面向C++/Qt程序开发人员,适合对Qt编程感兴趣人员和广大的计算机编程爱好者阅读,也可作为相关机构的培训教材。*贯穿始终用带Webkit的Qt生成健壮的、多彩的桌面/Internet应
*贯穿始终用带Webkit的Qt生成健壮的、多彩的桌面/Internet应用
*介绍了使用模型/视图表和树模型、委托和视图工作中涉及的各种先进技术
*介绍了Qt强大的动画和状态机框架
《Qt高级编程》是一本阐述Qt高级编程技术的书籍。《Qt高级编程》以工程实践为主旨,是对Qt现有的700多个类和上百万字参考文档中部分关键技术深入、全面的讲解和探讨,如丰富的网络/桌面应用程序、多线程、富文本处理、图形/视图架构、模型/视图架构等;另外,除对每章主题内容的探讨外,还给出了许多与之相关的类、方法和技术细节,从而尽可能多地展示了Qt的各种特色。因此,即使是很有经验的Qt程序开发人员,也可以从书中找出自己不曾注意到的技术点。书中的全部示例程序都已用Qt4.6或者Qt4.5在Windows、MacOSX和Linux系统上进行了测试。
MarkSummerfield:Qtrac公司的创始人,独立的培训讲师、顾问、技术编辑,Go、Python、C++、Qt和PyQt方面的技术作家。Summerfield于1993年毕业于英国的威尔士斯旺西大学计算机专业。在加入Trolltech(奇趣科技)之前的几年时间,他在很多公司担任软件工程师的工作。最近几年,他成为了Trolltech的文档管理员,负责维护1500多页的Qt在线文档,创立了并负责编辑Trolltech的技术杂志QtQuarterly。
闫锋欣,西北农林科技大学教师,主要从事机械工程设计及自动控制研究,熟练掌握C/C++语言。出版过多本译著!
第1章混合桌面/Internet应用程序
1.1Internet相关窗口部件
1.2WebKit的使用
第2章声音和视频
2.1QSound和QMovie的使用
2.2Phonon多媒体框架
第3章模型/视图表格模型
3.1Qt的模型/视图架构
3.2用于表格的QStandardItemModel
3.3创建自定义表格模型
第4章模型/视图树模型
4.1用于树QStandardItemModel的用法
4.2创建自定义树模型
第5章模型/视图委托
5.1与数据类型相关的编辑器
5.2与数据类型相关的委托
5.3与模型相关的委托
第6章模型/视图中的视图
6.1QAbstractItemView子类
6.2与模型相关的可视化视图
第7章用QtConcurrent实现线程处理
7.1在线程中执行函数
7.2线程中的过滤和映射
第8章用QThread实现线程处理
8.1独立项的处理
8.2共享项的处理
第9章创建富文本编辑器
9.1QTextDocument简介
9.2创建自定义的文本编辑器
9.3一个单行的富文本编辑器
9.4编辑多行的富文本
第10章创建富文本文档
10.1高质量地输出QTextDocument文件
10.2创建QTextDocument
10.3输出和打印文档
10.4绘制页面
第11章创建图形/视图窗口
11.1图形/视图架构
11.2图形/视图窗口部件和布局
11.3图形项简介
第12章创建图形/视图场景
12.1场景、项和动作
12.2增强QGraphicsView的功能
12.3创建可停靠的工具箱窗口部件
12.4创建自定义图形项
第13章动画和状态机框架
13.1动画框架简介
13.2状态机框架简介
13.3动画和状态机的结合
结束语
精选书目
前言
一段时间以来,我一直想写一本Qt书籍,一本能够涵盖《C++GUIQt4编程》一书中过于高深内容的书籍,尽管对一些读者来说,该书本身已经够有挑战性了。还有一些我打算涉及的专题材料(并非是比较难的,而是它们并没能包含进第一本关于Qt编程的书中)也想一并总结。此外,从Qt庞大的规模上来看,也没有哪一《Qt高级编程》能够对Qt所有的内容进行毫无偏颇的描述。毫无疑问,这为新技术文稿的撰写留下了空间。
这《Qt高级编程》所做的就是从许多模块和各个方面的类中选择了一些内容,并展示该如何使用它们。这些所选择的主题都是我自己感兴趣的,同时好像也正是它们在Qt爱好者邮件群qtinterest中引起了许多讨论。这些主题中的一些还没有在任何其他书籍中涉及过,而另外一些主题则较为熟悉,比如模型/视图编程。无论如何,我将尽量提供比其他可借鉴材料更为全面的内容。
因此,这《Qt高级编程》的目的就是帮助Qt编程人员加深和拓宽他们的知识,提高他们使用Qt成就事业的能力。“高级”方面通常更多地是指能做到什么,而不是实现方法的手段。这是因为,正如常说的那样,Qt让我们尽可能远离不相关的细节和潜在的复杂事物,提供易于使用的应用程序接口(API),从而只需简单、直接地使用就可以获得极好的效果。例如,我们将会看到:在不知道任何播放器工作原理的情况下,创建一个音乐播放器的过程;而所需要了解的仅仅是Qt所提供的那些高级API。另一方面,即使对于高级QtConcurrent模块的用法,它所涵盖的对多线程的必要知识也都很有挑战性。
这《Qt高级编程》假设读者都具有基本的C++编程能力,并且至少知道该如何来创建基本的Qt应用程序——例如,已经读过一部好的Qt4书籍,并有一定的工程实践经验。《Qt高级编程》还认为,读者应该熟悉Qt的参考文档,至少能够使用它查询到感兴趣的类的API。此外,一些章节会假设读者已经知道相关主题的基本知识——例如,第1章会假设读者已经知道一些JavaScript和Web编程的知识,在多线程的那些章节里,作者会假设读者能够理解线程的基本知识和Qt的线程类。所有这些假设都意味着,这《Qt高级编程》将能够免于介绍那些Qt程序开发人员已经熟知的许多细节和类,比如布局的使用、动作的创建、信号和槽的连接等,从而可以让《Qt高级编程》完全专注于那些读者不是很熟悉的知识。
当然,没有哪部单卷《Qt高级编程》籍就可以真正毫无偏颇地描述那700多个Qt公共类——在Qt4.6中,几乎有800个,以及100多万字的Qt文档,所以《Qt高级编程》也不会试图去那样做。相反,这《Qt高级编程》为如何使用Qt最具强大功能的那些特征提供了一些说明和示例,用来补充参考文档而不是对它的重复。
《Qt高级编程》在章节设计上,已尽可能做到内容完整,因而也就没有必要按照章节顺序自始至终地进行阅读。为了实现这一点,对于不同章节中要用到的那些特定技术,仅会在一个地方进行说明,而在其他地方则会使用交叉引用的方式给出。即使如此,如果你打算随机阅读一些零星章节,建议至少先对整《Qt高级编程》做一个粗略的浏览,因为一些章节会专注于某个特定主题,而它又是其他主题必不可少的材料。同样,我将尽可能多地介绍那些完全来自QtAPI的小细节,以使《Qt高级编程》的内容更为丰富,并在上下文中尽可能多地介绍那些特性,因而通篇会出现一些有用的信息。
与我之前那些书一样,《Qt高级编程》中引用的代码段都是些“活代码”,也就是说,这些代码都是直接从例子的源文件中自动抽取并直接嵌入到发送给出版商的PDF文件中的——因而就不会有剪切、粘贴方面的错误,而且可保证代码能够正常工作。这些例子可以从www.qtrac.eu/aqpbook.html获得,基于GPL(GNUGeneralPublicLicense,GNU通用公共授权第3版)进行授权。《Qt高级编程》将给出多达25个例子,分布在150多个.hpp和.cpp文件中,累计超过20000行代码。尽管全部最为重要的代码段都在书中进行了引用和解释,但还有大量的细节无法在《Qt高级编程》内进行阐释,因此,建议下载这些示例并至少阅读一下那些特别感兴趣的例子的源代码。除了这些例子,《Qt高级编程》还提供了一些包含常用功能的模块。所有这些都用AQP命名空间来确保其重用性,开头的一些章节会将它们引进来,然后在整《Qt高级编程》中一直使用。
所有例子(除了最后一章中用到了Qt4.6特性的那些例子)都用Qt4.5和Qt4.6在Linux、MacOSX和Windows平台上进行了测试。使用Qt4.5建立的那些应用程序将可以在Qt4.6下不做修改而直接运行,对后续的其他Qt4.x版本也可以运行,因为Qt在各个次要发行版中维持向后兼容。然而,对于这两个Qt版本之间的那些不同之处,《Qt高级编程》会说明和解释与Qt4.6相关的方法,而源代码部分会使用#ifQT_VERSION,以便可以用特定的版本或者最好的习惯来编译代码。一些例子或许可用于先前的Qt4.x版本,特别是Qt4.4,且一些例子或许可以向后移植(backport)到更早的Qt版本——然而,这《Qt高级编程》仅仅完全关注于Qt4.5和Qt4.6,所以不会明确涉及向后移植的问题。
《Qt高级编程》给出了最好的Qt4.6实践,尽管Qt4.6比Qt4.5包含更多的新特征,但对代码来说却并没有太多不同。一个细微差别之处在于:Qt4.6有“退出”(quit)动作的快捷方式而Qt4.5没有;源代码中,对于Qt4.6会使用其快捷方式,而对于Qt4.5,则会用#ifQT_VERSION表示与之功能相当的代码。更为重要的不同之处在于,Qt4.6引入了QGraphicsObject类,而且还在它与几何形状变化通信时改变了那些图形项(graphicsitem)的行为。我们会在某些地方说明这些不同之处,并在书中的代码段中给出Qt4.6的方法,但是在源代码中,用#ifQT_VERSION来说明如何用Qt4.6和Qt4.5及其早期版本来完成同样的事情,并为两者选择最好的方法。在《Qt高级编程》的最后一章,作为之前给出例子的转换,用三个例子中的两个来说明与Qt4.6相关的那些特性,以及对Qt4.6动画和状态机框架的应用。通过修改之前的例子,就更容易看出如何从传统的Qt方法过渡到新的框架下。
Qt的下一个版本,Qt4.7将重点关注稳定性、速度以及除QtQuick之外的新技术(可提供一种使用类JavaScript语言创建GUI声明的方法),我们希望引入比之前发行版更少的新特性。尽管现在仍然有巨大的精力投入到Qt中,其范围也在不断扩大,但《Qt高级编程》应当作为学习和使用Qt4.x系列方面重要技术的一个有用资源,特别是对Qt4.5、Qt4.6和若干年后就要来临的那些后续版本来说。
致谢
我第一个要感谢的是我的朋友TrentonSchulz,Nokia公司Qt开发框架组(QtDevelopmentFrameworks,之前的Trolltech公司)中的一名前软件工程师,他目前是挪威计算中心(NorwegianComputingCenter)的一名研究员。事实证明,Trenton是一名可靠的、富有远见和挑战性的审稿人,他阅读仔细、标准严格,提出的一些建议对改进《Qt高级编程》相当有帮助。
接下来要感谢的是另外一位朋友JasminBlanchette,他以前也是Qt开发框架中的一名软件工程师,与我一起合著了《C++GUIQt4编程》(C++GUIProgrammingwithQt4)第二版中文翻译版已由电子工业出版社出版。——译者注。一书,目前正在慕尼黑工业大学攻读博士学位。我们两个在前一段时间就对《Qt高级编程》就形成了一致意见,而仅仅是因为工作的压力让他成为了一名出色的而且苛刻的审稿人,而不是合著者。
我还要感谢很多那些工作(或任职)于Qt开发框架的人,他们阅读了《Qt高级编程》的部分内容并提供了有益的反馈信息,还要感谢那些回答了技术问题的人,以及同时做了以上两件事的人。这些人包括:AndreasAardalHanssen(对图形/视图那几章给出了特别优秀的反馈和建议,并为我列出了离屏渲染方面的补充材料)、AndyShaw、BjrnErikNilsen、DavidBoddie、HenrikHartz、KavindraDeviPalaraja、RainerSchmid(目前在Froglogic)、SimonHausmann、ThierryBastian和VolkerHilsheimer。
意大利软件公司(www.develer.com)是一家很好的一个软件公司,为我提供了免费主机,让我能够在漫长的写作过程中安心完成《Qt高级编程》。他们的一些开发人员给了我有用的反馈,特别是早期章节中的一些例子。我特别感谢GianniValdambrini、GiovanniBajo、LorenzoMancini(为我创建了资料库)和TommasoMassimi。
特别感谢初稿读者AlexeySmirnov,他指出了一些错误,并鼓励我在一些网络示例中加入对网络代理的支持。
我还要感谢Froglogic的创始人,ReginaldStadlbauer和HarriPorten——他们提供给我的兼职顾问的工作,这使我写作《Qt高级编程》的时间更加宽裕,同时也向我介绍了一些编程技术,这些技术对我来说都是一些全新的想法。他们还把我变成了他们的GUI应用程序测试工具——Squish的超级爱好者。
我的朋友BenThompson也应得到许多感谢,他帮我回忆起一些已经忘却的、可靠的数学概念,并且尤其要感谢他的耐心,一遍遍地向我解释这些数学概念直到我能够理解为止。
若没有Qt,《Qt高级编程》(以及其他一些书)就不会成为现实。因此,我非常感谢Qt的创始人EirikChambeEng和HaavardNord,尤其要感谢Eirik,他允许我在Trolltech的时候,把撰写我的第一《Qt高级编程》作为日常工作,并且他还花费时间和精力来为这《Qt高级编程》写了序言。
要特别感谢我的编辑DebraWilliamsCauley,相当独









