首页| 论坛| 消息

标题:Qt编写安防视频监控系统68-兼容Qt4到Qt6
作者:liudianwu
日期:2021-09-17 08:11
内容:

## 一、前言
为了从Qt4.7兼容到Qt6.2及后续版本,着实花了不少精力,前提也是对自定义控件大全和各种跨平台的轮子组件全部做成了兼容Qt4到Qt6,这样只剩下UI这块需要兼容就好办多了,各个击破战略,由于最开始就是从Qt4开始学习Qt的,所以对于旧版本的Qt的写法非常熟悉,新版本的Qt的写法也慢慢适应,为了兼容各种Qt版本,代码量增加不少,里面各种#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))针对Qt版本的判断然后执行对应的代码,发现Qt版本的升级趋势大致是新增模块轮子(比如websocket、mqtt)、拆分以前的模块(比如opengl拆分成opengl+openglwidget、svg拆分成svg+svgwidget)、细化功能分类等。

#### 1.1 直观总结
1. 增加了很多轮子,同时原有模块拆分的也更细致,估计为了方便拓展个管理。
2. 把一些过度封装的东西移除了(比如同样的功能有多个函数),保证了只有一个函数执行该功能。
3. 把一些Qt5中兼容Qt4的方法废弃了,必须用Qt5中对应的新的函数。
4. 跟随时代脚步,增加了不少新特性以满足日益增长的客户需求。
5. 对某些模块和类型及处理进行了革命性的重写,运行效率提高不少。
6. 有参数类型的变化,比如 long * 到 qintptr * 等,更加适应后续的拓展以及同时对32 64位不同系统的兼容。
7. 源码中的double数据类型全部换成了qreal,和Qt内部数据类型高度一致和统一。
8. 我测试的都是QWidget部分,quick部分没有测试,估计quick部分更新可能会更多。
9. 强烈建议暂时不要用Qt6.0到Qt6.2之间的版本,一些模块还缺失,相对来说BUG也比较多,推荐6.2版本开始正式迁移。
#### 1.2 经验总结
1. 万能方法:安装5.15版本,定位到报错的函数,切换到源码头文件,可以看到对应提示字样 QT_DEPRECATED_X("Use sizeInBytes") 和新函数。按照这个提示类修改就没错,一些函数是从Qt5.7 5.9 5.10等版本新增加的,可能你的项目还用的Qt4的方法,但是Qt6以前都兼容这些旧方法,到了Qt6就彻底需要用新方法了。
2. Qt6对core这个核心类进行了拆分,多出来core5compat,因此你需要在pro增加对应的模块已经代码中引入对应的头文件。
```cpp
//pro文件引入模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
//代码中引入头文件
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
#include
#endif
#if (QT_VERSION >= QT_VERSION_C ..

回复 发表
主题 版块