本文转载自http://hi.baidu.com/xchinux/item/9044d8ce986accbb0d0a7b87

一、将某个QT4项目改成QT5遇到的问题

该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宏的问题,现在先不改吧,虽然新方法去除了这两个宏,并且加强了类型检查,但也又增加了类名和一个&符号,先偷懒不动吧。

--------------------------------------------------------------------------------------------

二、QT5.0的改动

1. Qt5加入了JSON支持
2. Qt5支持的平台有: 桌面平台:Windows, Linux/X11, Mac OS X 
嵌入式平台: Embedded Linux(DirectFB, EGLFS, KMS, Wayland), WIndows Embedded(Compact and Standard), Real-Time OS(QNX, VxWorks, INTEGRITY) 
移动平台:Android, iOS, Windows 8(WinRT), BlackBerry 103. QtQuick2, 
新增了许多新QML Elements,要求有OpenGL(ES)或DirectX支持,还有关于图形效果、多媒体方面的加 强
4. 新增了QGuiApplication 和QWindow,用于QtQuick,如果是开发传统的基于QWidgrets的程序,仍然使用以前的QApplication和QMainWindow
5. 新的QtGui中只包含了少量GUI核心的内容,原来Qt4中的QtGui中包含的大多数Widgets、ItemView、GraphicsView相关内容都被移到了QtWidgets模块中,所以在Qt5中,如果开发QtQuick2应用,就可以去除QtWidgets模块了,不是必须的了。
6. 单独的QtMultimedia模块,可在C++和QML中使用,支持audio、video、radio、mediaplayer、camera等接口
7. QtNetwork模块中新增了bearer managemtn,来控制系统的(网络等)连接状态
8. QtQml模块提供基本的QML引擎、类型、对象等以及与其有关的C++支持,而QtQuick模块则提供了基本的QML Elements。
总体来说 :从Qt4到Qt5的升级比较平稳,不会像Qt3到Qt4那样相当于重新写了一遍。并且QtQuick的升级也算平稳(C++中主程序要有所变化),还将一些原来QtMobility中的内容移到了Qt5中。开始支持主流移动平台(Android、iOS、Window 8(WinRT)、BlackBerry 10),Symbian已经不再更新发展,就让它远去吧。至于MeeGo/Sailfish,应该将它归类到Linux/X11中去,嵌入式平台中则增加了QNX(其实BlackBerry 10也是基于QNX的)。
 
http://blog.csdn.net/ccf19881030/article/details/11992967

将某个Qt4项目升级到Qt5遇到的问题(13条方法)的更多相关文章

  1. QT4项目升级到QT5遇到的问题和解决方法

    QT4升级到QT5改动: PC部分: [改QTDIR变量] 在工程根目录下找到.user文件, 如InnoTabPlugin.vcxproj.user 修改指向你的QT5根目录: <Proper ...

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

    原文:http://hi.baidu.com/xchinux/item/9044d8ce986accbb0d0a7b87晚上花了4个小时,将以前的一个项目从Qt 4.8.4-MinGW升级到了Qt5. ...

  3. 将某个Qt4项目升级到Qt5遇到的问题

    本文转载自http://hi.baidu.com/xchinux/item/9044d8ce986accbb0d0a7b87 一.将某个QT4项目改成QT5遇到的问题 该Qt4项目以前是使用Qt4.7 ...

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

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

  5. Qt4项目迁移到Qt5问题:greaterThan(QT_MAJOR_VERSION, 4): QT += widgets .

    文章来源:http://blog.csdn.net/ccf19881030/article/details/18220447 问题一:错误:C1083: 无法打开包括文件:"QApplica ...

  6. qt4升级到qt5的一些问题

    由于最近项目使用的qt版本从qt4.8升级到qt5.5,虽然从4到5的变化不大,不过还是有许多的问题需要记录一下,希望可以帮助到更多的人​ 1.由于Qt5将大部分桌面部件移到了Qt Widgets模块 ...

  7. QT项目升级(QT4.6.3到QT5.2)时,遇到的问题和解决方法

    QT4升级到QT5修改: PC部分: [改QTDIR变量] 在project根文件夹下找到.user文件, 如InnoTabPlugin.vcxproj.user 改动指向你的QT5根文件夹: < ...

  8. 【Qt开发】QT4 升级到 QT5 改动

    QT4 升级到 QT5 改动: PC部分: [改 QTDIR 变量] 在工程根目录下找到 .user 文件 ,  如 InnoTabPlugin.vcxproj.user 修改指向你的 QT5 根目录 ...

  9. NET MVC1项目升级到MVC2最简单的方法

    NET MVC1项目升级到MVC2最简单的方法 把MVC1项目升级到MVC2,最简单的做法如下: 新建MVC2项目 新建一个MVC2项目,把原来MVC1的项目文件全部拷贝到新建MVC2项目目录里,依照 ...

随机推荐

  1. Git Bash下实现复制粘贴等快速编辑功能

    在windows下使用Git Bash会经常用到选中.复制.粘贴等功能,但是一般用的方法会很复杂,笔者经过查阅一些资料,特整理一些常见编辑功能的实现方法. (1)默认方法: 单击左上角的logo ic ...

  2. Laravel5.2 下使用Form

    laravel到了5.1.*以上版本,便没有了illuminate/html类库的支持, 我试着把illuminate/html类库加入了laravel5.2,依然没有用, 但是laravelcoll ...

  3. 解决html5新标签【placeholder】低版本浏览器下不兼容问题

    placeholder属性是HTML5 中为input添加的.在input上提供一个占位符,文字形式展示输入字段预期值的提示信息(hint),该字段会在输入为空时显示. 实例:1 <input ...

  4. Demon_Tank (坦克移动发射子弹)

    using UnityEngine; using System.Collections; public class Tank : MonoBehaviour { //子弹预设体 public Game ...

  5. Nginx学习之六-nginx核心进程模型

    一.Nginx整体架构 正常执行中的nginx会有多个进程,最基本的有master process(监控进程,也叫做主进程)和woker process(工作进程),还可能有cache相关进程. 一个 ...

  6. JavaScript: Class.method vs Class.prototype.method

    在stack overflow中看到一个人回答,如下   // constructor function function MyClass () { var privateVariable; // p ...

  7. 配置 VS 2015 开发跨平台手机应用

    为了使用 VS 2015 开发跨平台手机应用,VS 2015 装了很多次,遇到了很多坑,才终于弄明白怎样配置才能正常使用C#开发手机应用,现把步骤分享给大家,以免大家少走弯路. 运行环境: Windo ...

  8. nginx log日志分割

    @echo offrem 备份并根据时间重命名错误日志文件set "cmdstr=move E:\nginx\logs\error.log E:\nginx\logs\error%date: ...

  9. foreach遍历扩展(二)

    一.前言 假设存在一个数组,其遍历模式是根据索引进行遍历的:又假设存在一个HashTable,其遍历模式是根据键值进行遍历的:无论哪种集合,如果它们的遍历没有一个共同的接口,那么在客户端进行调用的时候 ...

  10. 使用DataSet数据集删除记录

    使用DataSet删除记录和使用DataSet更新记录非常的相似,DataSet删除记录的步骤如下所示. q  创建一个Connection对象. q  创建一个DataAdapter对象. q  初 ...