迁移 Qt4 至 Qt5 的几个主要环节(数据库插件别拷错了地方)
Qt5推出一段时间了,经过了试用,虽然还存在一些问题,比如Designer 缺少 WebView 和 ActiveQt 的UI工具,此外 WebKit 的 Release 版本似乎和Visual-Studio 2012 Express 编译器不太吃劲,老是报运行时错误——好在目前用到的模块都测试过了。
1,修改路径系统。Qt4 的 QtGUI下很多类被独立到widgets模块里了,为了提高兼容性,把这些include 的抬头全去了,直接是 #include<qapplication> ,这样,通过 Qt += 模块名,即可弥合4,5之间的差异。
2,添加一个宏替换,Qt ::WFlag变成 Qt5 的 WindowFlags, 小问题。
3,插件系统的修改。 新的 Q_PLUGIN_METADATA 在插件实现类的首部,代替了以往在 CPP里Export 的模式,对迁移没有影响。加入编译预处理宏,判断一下标志,决定采用哪一种方法。
4,字符串处理方式问题。目前,由于项目对中文、英文和国际化的使用较为规范,没有遇到乱码的问题,可以认为兼容性较好。
5,第三方依赖性
如果引用了 PostgreSQL 或 MySQL的Sql 连接插件,注意把 libpq 和 libmysql相关的库文件拷贝到可执行文件所在文件夹下,而不是 plugins 所在的文件夹,否则尽管可以枚举到驱动,但连接可能失败。如果引用了OCI的插件,注意不要拷贝oci.dll 到发布文件夹,在某些情形下,会导致连接失败。而是利用发布目的机器路径系统上的oracle 连接实例来获取依赖。
6、发布程序
Qt5的plugins 文件夹中的内容,不要忘记一起发布。
总结: 经过测试, Qt4 到 5 的转换比 Qt3->4 要平滑很多,一般的项目均可以快速迁移。
-------------------------------
顺便吐糟,编译Qt5对资源的消耗大大出乎意料,特别是那个 Webkit,Link时直接硬盘 100%狂闪,虚拟内存撑了N大,真是后悔内存没多买一条。内存碎片化估计也很严重,编译到outof mem后,重启系统接着来才成。在GCC下也是,Mac 没试过。
以目前Qt代码量来看,再过几年没有4G的内存根本就没法编译。这样想来应该不止Qt,恐怕以后很多大一点的C++项目都是如此吧——雪球滚大了,不停的要兼容旧版、加入新功能,而且重构对很多项目来说是不可能的,只能越滚越大。
http://blog.csdn.net/goldenhawking/article/details/8497205
迁移 Qt4 至 Qt5 的几个主要环节(数据库插件别拷错了地方)的更多相关文章
- 在VS2010 中兼容Qt4和Qt5
1,同时安装Qt4和Qt5 Qt_add,然后在 2. 如果之前的项目使用Qt4编写的,如果新添加新的类和ui的话,一定要选择Qt Add_in 1.1.11,不然就无法生成moc文件,随便选择 Ch ...
- Qt4升级Qt5注意问题
Qt4升级Qt5注意问题 Qt4过渡到Qt5的项目一开始就受阻,记录一下遇到的下面的问题 --->编译遇到类似错误: error: QCalendarWidget: No such file o ...
- qt-vs-addin:Qt4和Qt5之VS插件如何共存与使用
原则上,两者是不可以同时存在的,但是如果都安装了,该如何分别使用他们呢? Qt4 Visual Studio Add-in:官网可以下载安装程序,qt-vs-addin-1.1.11-opensour ...
- 从Qt4到Qt5的,主要的进化有三(对于QtWidget的精简和优化会很有限)
从Qt4到Qt5的,主要的进化有三:1 语言的进化,原来是基于C++(qtwidget)和XML(.ui),现在添加了QML(QtQuick)+JS(v8)的架构.2 绘图系统的进化,原先基于QPai ...
- Qt入门之基础篇(1):Qt4及Qt5的下载与安装
转载请注明出处:CN_Simo. 导语: Qt是一个跨平台的C++图形界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序.Qt很容易扩展,并且 ...
- 【转】qt-vs-addin:Qt4和Qt5之VS插件如何共存与使用
原则上,两者是不可以同时存在的,但是如果都安装了,该如何分别使用他们呢? Qt4 Visual Studio Add-in:官网可以下载安装程序,qt-vs-addin-1.1.11-opensour ...
- Qt入门之基础篇 ( 一 ) :Qt4及Qt5的下载与安装
转载请注明出处:CN_Simo. 导语: Qt是一个跨平台的C++图形界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序.Qt很容易扩展,并且 ...
- qt-vs-addin:Qt4和Qt5之VS插件如何共存与使用(转)
原则上,两者是不可以同时存在的,但是如果都安装了,该如何分别使用他们呢? Qt4 Visual Studio Add-in:官网可以下载安装程序,qt-vs-addin-1.1.11-opensour ...
- Qt5.8以上版本编译Oracle数据库的OCI驱动教程
在前一篇的文章中我已经发过一个相似的文章,详情请点击:Qt5编译oracle驱动教程. 在那一篇文章中已经可以解决了Qt5的常用版本的Oracle数据库驱动的支持,但是在新的Qt开发工具中那种方法竟然 ...
随机推荐
- yii操作数据库(PDO)
1.数据访问对象(DAO): 执行 SQL 语句 数据库连接建立后,SQL 语句就可以通过使用 [CDbCommand] 执行了.你可以通过使用指定的SQL语句作为参数调用 [CDbConnectio ...
- js循环遍历
//获取多个用户id 一般用在复选框 cust_id = 1,2,3,4; var str = cust_id.split(","); for (var key ...
- Leetcode 226 Invert Binary Tree python
题目: Invert a binary tree. 翻转二叉树. 递归,每次对节点的左右节点调用invertTree函数,直到叶节点. python中也没有swap函数,当然你可以写一个,不过pyth ...
- C语言基础11
函数指针的定义: 函数类型 (标识符 指针变量名)(形参列表) void printHello( ); void printHello( ){ printf("hello world!!! ...
- Redis存储Session
net Core 使用Redis存储Session 前言 Asp.net Core 改变了之前的封闭,现在开源且开放,下面我们来用Redis存储Session来做一个简单的测试,或者叫做中间件(m ...
- Chapter 11. Frame, MainWindow, and Toplevel Widgets 框架,主窗体,顶级部件
Chapter 11. Frame, MainWindow, and Toplevel Widgets 框架,主窗体,顶级部件 框架和Toplevels 都是设计用于其他部件的容器. 它们的不同在 ...
- Linux常用C函数---内存控制篇
函数讲解部分参考http://net.pku.edu.cn/~yhf/linux_c/ calloc(配置内存空间) 相关函数 malloc,free,realloc,brk 表头文件 #includ ...
- 数据结构multiset hdu-2275-Kiki & Little Kiki 1
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2275 题目意思: 有两种操作: 1.push a 把a放进数组里. 2.pop a 输出不超过a的最 ...
- OC基础4:类和方法
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.类的声明(@interface)要放在 ...
- OAuth2.0开发指南
OAuth2.0开发指南 1.认证与登录 来往开放平台支持3种不同的OAuth 2.0验证与授权流程: 服务端流程(协议中Authorization Code Flow): 此流程适用于在Web服务端 ...