将Qt项目从Qt4移植到Qt5手记

[Qt]

有一个旧的Qt项目,当初是用Qt4.7做的。Qt5发布以后,API有了很多改变。因此对源代码进行移植。

事实证明,由于项目比较简单,而且当时也没有使用QML,因此移植工作也不是很复杂,基本用了两个小时的时间就能在新的Qt5上编译了。现在,仅将过程简单记录一下。

参考资料:

我使用的Qt版本是5.2.0,Mac版。

第一步,当然是先尝试编译,在出现了无数编译错误后放弃手工修改。

仔细阅读了参考资料后,发现有一个fixqt4headers.pl脚本可以帮助做部分自动修改。只是,找遍了我的硬盘也没找到该文件。好在它是一个Perl脚本,直接上网上搜了一个下来。直接执行时发现它需要知道QtCore头文件的路径,但是,奇怪的是,Mac的clang_64目录中并没有QtCore相关的头文件,最后只好以iOS版的代替,命令如下:

QTDIR=/Users/dujinfang/Qt/5.2.0/ios perl ~/Downloads/fixqt4headers.pl

执行完毕后,可以发现它将原先的QtGui替换成了QtWidgets,如:

-#include <QtGui/QApplication>
+#include <QtWidgets/QApplication>

然后,将工程文件(.pro文件)中加上:

QT += widgets

再手工尝试编译,还是报错,原来Qt5取消了toAscii()函数,全局查找替换,将它替换为toLatin1()后问题就解决了。

当然,QWebView也找不到了,还有一些其它的错误,我简单的将那些相关的代码都注释掉了。最后,在Mac上编译通过。

当然,编译通过还不代表完成了,原来的项目3年没有动了,后来还需要诸多更新和修改,以及学习新的Qt5的编程方式。不过,Qt5.2终于支持iOS和Andriod开发了,虽然还不是很完善,但期待它能做得更好。

是以为记。

七歌
微信扫一扫