将某个Qt4项目升级到Qt5遇到的问题[转]

简介: 该Qt4项目以前是使用Qt4.7.4 MSVC2008开发的,因为使用到了OWC10(Office Web Components),使用MSVC编译器的话无法正常升级到Qt4.8.x和Qt5,于是将编译器转成了MinGW4.7,Qt升级到了4.8.4。

该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. 程序中使用了OWC10,用到了ActiveQt,原来的做法是在.pro中加CONFIG += qaxcontainer,现在需要改成

QT += axcontainer

当然了,原来的CONFIG += qaxcontainer也将去除

 

3. 为了充分使用C++11特性,在.pro中加下面一行

CONFIG += c++11

 

4. 在源文件中,凡是涉及到原QtGui中可视部件的,全要修改头文件引用,或者增加QtWidgets头文件,比如:

#include <QtGui/QPushButton>  要改成  #include <QPushButton>  或者  #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),这样就正常了,只是它的对话框不是系统形式的,暂且将就吧。

 

8. 还有,Qt5解决了ui_qaxselect.h文件的问题。在Qt4时代,使用ActiveQt时,老提示没有这个文件,需要自己找到源代码手工uic qaxselect.ui > ui_qaxselect.h来生成一下,Qt5中则解决了该问题。

 

9.使用到打印相关的类,Qt5单独放到了QtPrintSupport模块中,所以得加头文件#include <QtPrintSupport>,在.pro中要加QT += printsupport

 

10. 使用到QWebPage等webkit相关可视部件的,Qt5单独放到了QtWebKitWidgets模块中,所以得加头文件#include <QtWebKitWidgets>,在.pro中要加QT += webkitwidgets

 

11. Qt4中的cleanlooks、plastique、cde、motif等主题样式没有,新加了个fusion,好吧,问题是我的一个项目框架使用的是cleanlooks主题样式然后加自定义样式表,这下可好,升级Qt5后,样子有的就与windowsvista或fusion不相符或有缺陷,得调整一下了。所以,对主题样式依赖比较严重的程序,要衡量一下是否要升级到Qt5了。

 

12. .pro文件中的TARGET在Qt4(qmake v2)中是可以不填写的,那么它就从自动采用.pro文件名字,而在Qt5中(qmake v3)这个TARGET不可不写。

 

13. Q_WS_XX的宏不可用了,使用Q_OS_XX代替.

 

至于c++11 支持的连接信号与槽时可以不使用SLOT、SIGNAL宏的问题,现在先不改吧,虽然新方法去除了这两个宏,并且加强了类型检查,但也又增加了类名和一个&符号,先偷懒不动吧。

目录
相关文章
|
5月前
03 QT - 创建QT项目(手动的方式)
03 QT - 创建QT项目(手动的方式)
23 0
|
6月前
[总结]分享几个自己写的关于qt项目
[总结]分享几个自己写的关于qt项目
|
1月前
|
自然语言处理 安全 算法
【Qt 基础 】深入理解Qt:qApp的全面掌握与实践
【Qt 基础 】深入理解Qt:qApp的全面掌握与实践
51 1
|
1月前
|
编译器 C语言 Android开发
Qt5安装及组件选择(Qt 5.12)
Qt5安装及组件选择(Qt 5.12)
74 2
|
1月前
|
Windows
Qt 5.14.2 打造跨平台应用的秘诀:用Visual Studio 2022和Qt 5.14.2轻松创建你的首个QT项目
Qt 5.14.2 打造跨平台应用的秘诀:用Visual Studio 2022和Qt 5.14.2轻松创建你的首个QT项目
|
4月前
|
IDE 数据可视化 开发工具
C++ Qt开发:Qt的安装与配置
Qt是一种C++编程框架,用于构建图形用户界面(GUI)应用程序和嵌入式系统。Qt由Qt公司(前身为Nokia)开发,提供了一套跨平台的工具和类库,使开发者能够轻松地创建高效、美观、可扩展的应用程序。其被广泛用于开发桌面应用程序、嵌入式系统、移动应用程序等。无论是初学者还是经验丰富的开发者,Qt都为构建高质量、可维护的应用程序提供了丰富的工具和支持。
75 0
C++ Qt开发:Qt的安装与配置
|
5月前
|
调度
05 QT - 一个最简单的Qt应用程序
05 QT - 一个最简单的Qt应用程序
16 0
|
7月前
vs2022配置Qt6
vs2022配置Qt6
96 1
|
XML SQL 编译器
|
C++
QT | VS2017 + Qt5.14.2环境搭建
手把手教你大搭建 VS2017 + Qt5.14.2 开发环境。
725 0

推荐镜像

更多