将项目从Qt3到Qt4移植

November 25, 2008 at 5:50 pm (qt)

最近粗略移植了一个开源的IM客户端到Qt4。目前为止花了2个周末和零星的上班时间。剩下的工作都是逐步恢复项目完整的功能。源项目是一个KDE3项目,但不过于依赖KDE3。因此为我节省下了不少的时间。

第一步: KDE3 to QT3
主要是逐步的替换KDE的控件到QT3控件。一个基本的法则是大胆利用注释,将找不到替代控件的代码注释掉。可以为移植节省不少时间。注释过的代码可以在移植完成后再进行改写。

其次是KDE的i18n()宏,可以先定义这样一个宏。避免每到一处i18n(“ffadfa”)的地方都进行修改。

#ifndef i18n
# define i18n(x) (QString( x ))
# define I18N_NOOP(x) (x)
#endif

第二步 autotools to qmake
这不是作为向qt4移植的铺垫。换到qmake后直接去掉configure.ac中的对KDE的依赖。代码中残留的对kdelibs的头文件的引用得到清楚。

第三步 qt3 to qt4

首先将.pro文件中加入QT += QT3SUPPORT。然后运行qt3to4。qt3to4会粗略的将qt3的头文件替换到qt4,并针对API的变化进行简单代码修正。但是通常并不完全。等他处理完了之后,需要运行qmake-qt4将生成依赖qt4的Makefile。然后就可以Makefile.

这个时候程序会出现很多的错误,需要耐心的参考这篇文档进行逐步的修正。需要注意的是由于两个版本的头文件交叉的引用,可能会出现声明和实现文件中变量的类型冲突的问题(如两个版本的QString)。。当他们之间进行赋值时就会出现类型冲突的问题。另外QT4中很多的类型的构造函数都声明为private,禁止了继承(如QToopTip)。需要暂时将相关的代码注释,日后再进行改写。

整个过程还是比较顺利的。只不过实践过程中有些工作比较机械。所幸干些我们强大的vim编辑器,让一切自动化的不可能变成了可能。

Permalink Leave a Comment

Follow

Get every new post delivered to your Inbox.