代码规范、月任务这些前期工作已经完成,下个月就要用QT重构原来在Windows Mobile和symbian上的两套代码了。之前用过QT画窗口,QT编写的软件也用过不少(KDE),但没有真正开始学。今天算是系统性学习的第一天。
虽然学的很浅显,但我也说一下学习的感受。
QT主要的优点:
1.标准的C++风格,使面向对象设计比较容易
MFC实际上是C with Class,强调与Windows SDK的无缝兼容,所以写MFC的时候,最要命的就是代码容易乱,你可以把后台功能独立,但前台一锅粥很难避免,所以长期以来,我用MFC编程一般不用来写太复杂的窗口,既然它本身面向对象并不彻底,我干脆就用C语言的方式使用它,数百行的overall.h和overall.cpp是我每个MFC工程里都会出现的。
QT的面向对象抽象做得很好,各模块划分非常清楚,下一步的面向对象设计,压力应该减轻了许多。
2.功能封装十分完善,基本上可以独立使用
个人最反感的就是库的混用,尤其是Windows SDK+STL、MFC+Boost之类的,设计原则和风格完全不同,很容易造成极其严重的问题,通常,这种混用的工程你把它改好的代价比你按照流程重新写的代价还高。
本组的代码规范是由我制定的,翻了下QT的教材,令我放心的是,至少我们重构的这一块儿,可以完全扔掉STL、CRT以及第三方网络及多线程支持了。
3.信号+槽机制易用性较好
相对于MFC的宏消息,QT的信号+槽很容易使用和调试,代码也更漂亮。
4.实现了自己的“类STL”库,统一了行为
对于symbian这样对STL支持比较差的环境,跨平台能力大大加强了,Windows下我以前也是尽量避免STL,一是VC的stream效率太低,而是string等的实现各STL版本家差距过大,线程安全难以保证。
现在,我基本可以放心使用,但是对stream我还是持保留态度。
5.强大的布局能力
这是我到目前为止QT给我最大的惊喜,强大的自动布局能力,使得QT下用代码写界面可能比MFC画界面还高效(个人感觉QT下写与画的差距并不十分大),并且,对话框也不用像以前那样固定大小,控件自动匹配窗口的能力很强。这一点给予了QT在C++界最高的界面开发效率。
6.命名
几乎和C#一样的命名规则,让我这个Windows用户很习惯。
QT的主要缺点
1.太肥……
一个core就2M,gui又是几兆,启动速度和C#有的一拼,这是两个最基本的库,不清楚如果那天某个大程序吧QT的所有库全用完了,启动一个exe是不是比4G发行版的linux还慢?这就是“完全”跨平台的代价,Windows已经载入到内存中的界面/网络/线程等等的支持,全都用不上。
2.风格太C++了……
这是不是和之前的矛盾呢?不,从QT几乎自己实现了一套STL看,QT对C++primer里那套东西是很看重的。不引发口水战了,说过编程规范是我定的,其中有一条就是——请使用QFile的直接io,一般情况下不要像教材那样在套上一层QDataStream;禁止文本或流方式读写文件,读写全部二进制操作,要格式化请处理字符串。
3.国际化……
严格来说,QT的国际化比MFC要好的多,但是一个很严重的问题是——对于中文用户来说,基本都是用中文版系统的,但是QT必须显式设定字符编码才能显示中文(实际上这样做国际化支持会比较好),但个人很不习惯。
4.线程问题……
QT不是Win32线程,太要命了……