- 情人节前夕,突然受邀作为本书中文版的审校,心中在惊喜之余,也有些诚惶诚恐。能与闫老师(yfx2003)合作,共同学习与探讨,确是一件幸事;但是自己真的能胜任该工作么?一开始心里还真是没底。不过靠着各位译者的辛勤与认真地工作,本书翻译工作按时完成,并已交稿。该书究竟如何,我们说了不算,最终还需要大家自己进行评判。只希望一点:在当前国内计算机类图书鱼龙混杂的情况下,本书不至于会让你失望。
Qt设计模式(第二版),英文名: An Introduction to Design Patterns in C++ with Qt™, 2nd Edition。
对于这样一本书,我想大家关心的可能就是:
- 这本书有什么亮点?
- 这本书有什么劣势?
- 这本书是否适合我?
- ... ...
特点?
- 它是一本在美国Suffolk大学已使用十余年的C++和Qt教程(当然,其内容也一直在演变)。
- 这是一本教材,一本C++的教材,所以不要求你有其他先修课程的基础。
- 它是Nokia Certified Qt Developer和Nokia Certified Qt Specialist认证的指定参考书籍之一,全书内容基本都是下面3项考试的考点
- Qt Essentials
- Widget UI with Qt
- Core C++ for Qt Developers
- Qt首席架构师 Lars Knoll(Qt Project的 Chief Maintainer)为之作序。这能说明些问题吧?
- ...
谁需要这本书?
要搞清这个问题,实在挺难,不过我们可以试着看看它是一本什么书
这是一本C++和/或Qt的入门书
如果你由于某种原因需要使用Qt,但是却没有C++的基础(一个简单的判断标准:比如C++ Primer中的大部分内容都不了解)。那么本书绝对你是所需要的,它借助短小例子讲解C++的基础概念,但又不涉及那些属于C++标准,但是对于Qt用户来说基本不会用到的东西。
如果你在学习C++,而却正在为C++的自身类库的局限性所苦恼。比如:C++98/C++03没有对unicode提供任何支持,一般只有一个非常含糊的wchar类型可用,尽管C++11和C1X提供了unicode支持,但现在却仍没有编译器支持。比如:C++标准中没有界面库,而调用系统API来写图形界面非常痛苦,而且不能跨平台。比如:尽管C++的标准模板库功能相当强大,但是你可能无法容忍这堆东西写的代码,你可以对比STL中的容器和Qt的容器,可以对比C++11中的正则表达式和QT中的正则表达式来感受一些。
如果你正准备学C++,但面对繁多的书籍无所适从,那么本书是比较适合你的书籍之一(其他值得推荐的书籍也很多,一般来说,翻译的书籍会比国内原创的要好很多)。如果你学习C++不是为了应付学校的考虑,而是真的想学习些东西,并还想涉足一下跨平台界面,那么本书是绝佳选择。
如果你想学习一下Qt,且有一定的C++基础;如果你使用过Qt的其他语言绑定,比如PyQt4/PySide等,想涉足C++ Qt;如果你... 。不妨去书店找到本书,然后快速浏览,以确定本书是否适合于你。Qt是C++的库,你对某一语言的掌握可能足以让你做出决定。
如果你对C++没有任何兴趣,只是想批驳C++和Qt,那么本书值得买回家(不然,自己不了解的东西,怎么批判呢,对吧?)。
如果你只是想装扮一下自己的书柜,...
...
这是一本设计模式的入门书
如果你有一定的C++和Qt的基础,但是对设计模式不了解,也没有看过 设计模式精解 或 四人帮的设计模式一类的书籍,那么本书值得你考虑。
如果你对C++和设计模式都没概念,但只要你有兴趣,那么从本书开始,一块进行学习吧。
...
这也是一本C++和Qt进阶的书
矛盾么?
说它是入门的书,是因为它介绍都是常用的、有用的,但是比较基础的内容。说它是进阶的书,而因为如果这些你真的都掌握了,那么你至少会对Qt有全新的了解。别忘记,它是Nokia Certified Qt Specialist认证的指定参考书籍之一(尽管,该认证以后有什么用,以及是否继续存在,我也不清楚。so, 别问我这方面的问题哈)。
刚跨入Qt门槛的同仁可能会遇到各种比较困惑的问题:比如何时必须要重新qmake,为什么需要等。本书中包含的各类小技巧和提示,可能会有助于你跨过此类难关。C++是一个非常复杂的语言,很容易让人有挫败感!希望你不会被各类小困难吓倒。
马上就Qt5,这本书还有用么?
在看这个消息时,我也在考虑这个问题:Qt5都都是qml了,C++还有用么。而最近,似乎心底有了确切的答案。当然需要!
在Qt5中,javascript类语言QML(Qt Meta object Language)将和C++并列作为Qt的一等公民。而且可以预见,将来的Qt的书籍,开篇将是QML开始的例子,这不难理解,毕竟QML比C++简单很多,也易用很多。
但是当你想稍微深入一点时,那么你进入的将仍然是C++的世界。这个有点儿类似于(C)Python和C语言的关系,当你出于性能或其他方面的考虑想扩展Python,或者在一个C语言程序中嵌入Python程序时,你都是在和C语言和Python的api(也是C接口)打交道。
在Qt中,最突出的特色就是它的原对象系统。而现在,这一特色直接体现在名字中了:QML。
当前社会似乎是非常地浮躁,Qt开发者整体来说已经好很多了(大部分都是靠兴趣自学的,而不是通过课堂被灌输的),但是依然还是有些浮躁,在Qt4时代,突出表现就是搞不清类库Qt和语言C++的关系,求速成而忽略C++的学习。
在Qt5中,随着qml的流行,大家可能会更忽视其底层C++的学习,当然这也不见得是个坏事。
劣势?
金无足赤,人无完人。这本书也是如此
没有中文相关的内容
当然,这是国外书籍最大的问题之一。比如你看不到:
QTextCodec::setCodecForCString(...); QTextCodec::setCodecForTr(...); QTextCodec::setCodecLocale(...);
这种东西。
不过,说实话,这真的是一件好事。因为用这种代码的同仁,90%以上肯定都不清楚自己在干嘛:代码是如何作用的,为什么在简体的windows上这样就可以工作,有没有副作用。[一旦你使用了这种代码,你就无法保证代码的跨平台性!]
不过Qt5给大家带来了好消息,前两个函数直接取消了。而第三个,我们可能都清楚,我们在99%以上的情况下都没有理由会用到它。所以Qt5下,大家基本可以彻底和这3个函数byebye了。
由此一来,C++自身在中文方面(Unicode)的缺陷也直接暴露给大家了。
Qt很多东西没有涉及
术业有专攻。一本书包罗万象的书并不适合当教材使用,一般也不适合通读(当作参考书可能不错,但是Qt内容更新又太快)
QML相关内容、stylesheet,QtScript、webkit等等,书中都没有提及。但换句话说,它讲解的都是Qt和C++中的核心内容。掌握这部分内容后你可以借助其他资源对自己感兴趣的领域进行学习(比如Qt5中新增加了大量的模块,全新的多媒体模块、3D模块,等)。
没有涉及如何为Qt做贡献
这是最遗憾的,它没有介绍如何向Qt Project项目提交Bug、提供补丁、参与讨论等内容。
当前 qt-project.org 已经完全开放,任何人都可以直接提交补丁,通过邮件列表或IRC频道(比如#qt-labs等)直接参与讨论。