如果Qt4代码足够规范,要使其支持使用Qt5编译还是比较容易的。下面是我在用Qt5编译EzViewer时遇到的一些问题,总结一下。总的来说,如果只使用Widget,Qt5与Qt4的区别还是比较小的。
区别一:
Qt 5 与 Qt 4 的一个主要区别是,将 widget 从 QtGui 模块放到了全新的 QtWidgets
模块。这对我们项目的影响主要有两点:
1、.pro项目文件,需要加入widgets模块:
QT += widgets
为了保持与Qt4的兼容,可以这样写:
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
2、头文件。
1) 为了方便,很多人都是这样引用Qt的头文件的:
#include <QtGui>
在Qt5里面,则还需要加上:
#include <QtWidgets>
2) 有些人则比较注意只引用要用到的头文件,但他们可能是这样写的:
#include <QtGui/QWidget>
这种方式现在也要改成下面的样子:
#include <QtWidgets/QWidget>
3) 不论是上面哪种方式,为了和Qt4兼容,要写成这个样子:
这种方式在Qt4和Qt5中都是正确的。
区别二:
为了让代码跨平台,经常需要针对不同平台的特性做一些处理,通常是依赖平台相关的宏来判断。在 Qt 5 中,所有的 Q_WS_* 都变成了 Q_OS_*。因此,在 Qt 4 中的代码
1、.pro项目文件,需要加入widgets模块:
QT += widgets
为了保持与Qt4的兼容,可以这样写:
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
2、头文件。
1) 为了方便,很多人都是这样引用Qt的头文件的:
#include <QtGui>
在Qt5里面,则还需要加上:
#include <QtWidgets>
2) 有些人则比较注意只引用要用到的头文件,但他们可能是这样写的:
#include <QtGui/QWidget>
这种方式现在也要改成下面的样子:
#include <QtWidgets/QWidget>
3) 不论是上面哪种方式,为了和Qt4兼容,要写成这个样子:
#if QT_VERSION >= QT_VERSION_CHECK(5, 0,
0)
// #include <QtWidgets> or
others
#endif // QT_VERSION >= QT_VERSION_CHECK(5, 0,
0)
4) 因此,为了保持兼容和简洁,建议最好采用下面的方式引用头文件:
#include <QWidget>这种方式在Qt4和Qt5中都是正确的。
区别二:
为了让代码跨平台,经常需要针对不同平台的特性做一些处理,通常是依赖平台相关的宏来判断。在 Qt 5 中,所有的 Q_WS_* 都变成了 Q_OS_*。因此,在 Qt 4 中的代码
#ifdef Q_WS_WIN// call windows API#endif
在 Qt 5 中应该写成
而我的做法是这样的,在用到这些宏的cpp文件前面加上这样的定义:#ifdef Q_OS_WIN// call windows API#endif
#if QT_VERSION >= QT_VERSION_CHECK(5, 0,
0)
#define Q_WS_WIN Q_OS_WIN
#endif // QT_VERSION >= QT_VERSION_CHECK(5, 0,
0)
这样下面的代码就可以照常使用Q_WS_WIN了。
参考文档:
文档信息
- 版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
- 原文出处:三生石的博客
- 版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
- 原文出处:三生石的博客
没有评论:
发表评论