首页| 论坛| 消息

标题:Qt4/5升级到Qt6吐血经验总结V202308
作者:liudianwu
日期:2023-08-14 10:43
内容:

### 00:直观总结
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.2版本开始正式迁移。

### 01:01-10
1. 万能方法:安装5.15版本,定位到报错的函数,切换到源码头文件,可以看到对应提示字样 QT_DEPRECATED_X("Use sizeInBytes") 和新函数。按照这个提示类修改就没错,一些函数是从Qt5.7 5.9 5.10等版本新增加的,可能你的项目还用的Qt4的方法,但是Qt6以前都兼容这些旧方法,到了Qt6就彻底需要用新方法了。**PS:如果本身就是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_CHECK(6,0,0))
#include
#endif
```

3. 默认Qt6开启了高分屏支持,界面会变得很大,甚至字体发虚,很多人会不习惯,因为这种模式如果程序很多坐标计算没有采用devicePixelRatio进行运算的话,100%会出现奇奇怪怪的问题,因为坐标不准确了。要取消这种效果可以设置高分屏缩放因子。
```cpp
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))
QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Floor);
#endif
```

4. 原有的随机数函数提示用QRandomGenerator替代,为了兼容所有qt ..

回复 发表
主题 版块