将某个 Qt4 项目升级到 Qt5 遇到的问题
晚上花了 4 个小时,将以前的一个项目从 Qt 4.8.4-MinGW 升级到了 Qt5.0.1-MinGW。
该 Qt4 项目以前是使用 Qt4.7.4 MSVC2008 开发的,因为使用到了 OWC10(Office Web Components),
使用 MSVC 编译器的话无法正常升级到 Qt4.8.x 和 Qt5,于是将编译器转成了 MinGW4.7,Qt 升级到了
4.8.4。今天 Qt 5.0.1-MinGW 预编译版本发布了,于是就拿它练手,将它升级到 Qt5,以减少系统中存在
的多个 Qt 版本 。遇到的问题如下:
1.!!由于 Qt5 将大部分桌面部件移到了 Qt Widgets 模块中,所以在.pro 中要增加下面一行
QT += widgets
2. qt4 的 Qt::Flags qt5 下为 Qt::WindowFlags
2. 程序中使用了 OWC10,用到了 ActiveQt,原来的做法是在.pro 中加 CONFIG += qaxcontainer,现在
需要改成
QT += axcontainer
当然了,原来的 CONFIG += qaxcontainer 也将去除
3. 为了充分使用 C++11 特性,在.pro 中加下面一行
CONFIG += c++11
4. 在源文件中,凡是涉及到原 QtGui 中可视部件的,全要修改头文件引用,或者增加 QtWidgets 头文件,
比如:
#include <QtGui/QPushButton>!!要 改 成 pp#include <QPushButton>!!或 者 pp#include
<QtWidgets/QPushButton>
在以前使用#include <QtGui>的地方,要加上 #include <QtWidgets>
5. 由于 Qt5 去除了 QTextCodec::setCodecForCStrings()函数,所以在涉及到在 cpp 中直接写汉字的情况,
有如下两种修改方法:
a)!!如果以前的源文件编码是 GBK 的,则需要使用 QString::fromLocal8Bit()函数将原来的汉字括起来;或
者直接将源文件编码转换成 UTF-8 的(缺点是 MSVC 编译器不能方便的使用了)。我使用了使用
QString::fromLocal8Bit()来调用的方式(当然了,另写便捷函数或宏来处理)
b) 如果以前的源文件编码是 UTF-8 的,则什么都不用动。
6. 以前使用 QDesktopServices::storageLocation(QDesktopServices::xxxx)来获取一些系统目录,现在则
要改成
QStandardPaths::writableLocation(QStandardPaths::xxxx)
7. 以前调用 QFileDialog::getSaveFileName()时,如果在 Windows 下使用 Native Dialog 形式指定文件名,
则 能 正 常 显 示 , 如 今 Qt5 不 能 正 常 显 示 文 件 名 。 所 以 将 它 的 后 两 个 参 数 加 上 了 , 即
QFileDialog::getSaveFileName(xxx, xxx, xxx, xxx, 0, QFileDialog::DontUseNativeDialog),这样就正常了
只是它的对话框不是系统形式的,暂且将就吧。
评论5
最新资源