上个月,QT发布了从V4.5版本开始,将发布LGPL协议的QT库;并且会发布应用于S60平台的QT库,另外,QT已经从V4.4开始支持Window Mobile(WCE)平台。
考虑到wxWidgets库不支持S60平台,因此决定研究一下QT库,把开发的GUI库转移到QT库。
在正式转移之前,当然要做一些可行性研究。这几天看了一下S60的参考手册及教材,并且编译了V4.5RC1版本,经过初步的研究,决定继续转移平台的进程,下面是对使用两个库的一些初步经验总结(个人观点,未免偏颇,欢迎讨论):
wxWidgets库缺点:
- 风格类似于MFC。虽然进行了增强,但大量使用宏,混杂使用现代C++语言特征与C语言编程特征。难于使用namespace等现代C++语言特性。
- 语言侵入性强, 单独使用个别库时需要对库进行初始化与清理工作。程序启动时的main函数完全被宏所取代,可定制性弱。
- 在开发过程中,使用MACRO进行条件编译的地方较多,使得程序不够简洁。
wxWidgets库优点:
- 开放性好,支持GNU的一些开放标准,如国际化、XRC等方面。
- 支持的语言多,可用于Python,PERL等环境,减少了多语言环境编程的学习难度
Qt库的优缺点:
- 库使用方法简洁,对编译环境侵入性弱。如程序启动为在main函数中创建QApplication实例,因而易于在创建之前完成其它工作。
- 广泛使用现代C++语言方式进行编程,如使用signal/slot库进行事件管理,较wxWidgets使用的方式简洁。
- RAD工具较wxWidgets下方便(个人观点)
- 应用面广,程序健壮性好
- 缺点是在某些方面相对封闭,未使用开放标准库,这可能与其license有关。如国际化等使用私有的方法进行管理。
- 不同平台下的库使用不同的源程序进行编译,优点是减少了预定义宏的使用,缺点是对库的的管理要复杂。这种方式是喜是优还要在后面的应用中来验证。
不管怎么说,基于QT方便应用移植到WCE与S60(即将支持),也需要把应用移植过来。当然在移植过程中还是会遇到很多的问题需要解决,一如当初使用wxWidgets一样。另外,在python等环境中,wxWidgets依然还是我的一个优先选择。