Qt5兼容使用之前Qt4接口 intersect接口

1. 问题

项目卡中遇到编译报错, 错误 C2039 "intersect": 不是"QRect"的成员 。

2. 排查过程

排查到依赖的第三方代码,使用 intersect 接口, 跟踪排查到头文件中使用了***#if QT_DEPRECATED_SINCE(5, 0)***

cpp 复制代码
#if QT_DEPRECATED_SINCE(5, 0)
    Q_REQUIRED_RESULT QT_DEPRECATED QRect unite(const QRect &r) const Q_DECL_NOTHROW { return united(r); }
    Q_REQUIRED_RESULT QT_DEPRECATED QRect intersect(const QRect &r) const Q_DECL_NOTHROW { return intersected(r); }
#endif

    friend Q_DECL_CONSTEXPR inline bool operator==(const QRect &, const QRect &) Q_DECL_NOTHROW;
    friend Q_DECL_CONSTEXPR inline bool operator!=(const QRect &, const QRect &) Q_DECL_NOTHROW;

#if QT_DEPRECATED_SINCE(5, 0) 表示qt 5.0版本已经弃用这个接口,这个问题 就是使用弃用的版本接口,那么问题就排查到了,库使用了qt4的接口,我们QT编译版本是Qt5.15, 上面显示Qt5.0以后就弃用了。

3. 解决

那我们就要解决Qt版版接口兼容问题了。下面有个方法:

  • 方法一 : 一般情况下弃用某个接口,会相应的有替代接口,经过查找手册这个代码附近就有这样的接口 QRect::intersected 一样的功能,可以更改源码将intersect 改为intersected解决
  • 方法二 : 很多情况下,我们没办法修改源码,或者修改工作量太大等原因。就需要做接口兼容了, qt有这样的一个宏QT_DISABLE_DEPRECATED_BEFORE,宏允许你指定你的代码所支持的 Qt 最低版本 查看手册了解具体解释和使用方法

QT_DISABLE_DEPRECATED_BEFORE=0x050100 支持Qt5.1 , 那我们要支持Qt4 可以限定

在pro文件中添加

cpp 复制代码
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x040900  //支持使用最低4.9版本接口

我这里使用cmake编译,在CMakeLists.txt中添加:

cpp 复制代码
ADD_DEFINITIONS("-DQT_DISABLE_DEPRECATED_BEFORE=0x040900")

4.拓展

至此这问题就解决了,第二个方法就比较通用了。

cpp 复制代码
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x040900 //支持qt4.9
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050000 //支持qt5.0
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050F00  //支持qt5.15
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000  //支持qt6.0

我们用这个宏就可以做一些事情了,比如多个开发团队统一代码版本,升级代码等工作了。

相关推荐
尘中远37 分钟前
【Qwt 7.0 系列】常用图表类型实战 —— 柱状图、散点图、箱线图与直方图
qt·qwt·工业软件·科学绘图
会周易的程序员41 分钟前
microLog 后端开发指南
开发语言·c++·物联网·设计模式·日志·iot·aiot
Esaka_Forever42 分钟前
Python 完整内存管理机制详解
开发语言·python·spring
星空露珠1 小时前
迷你世界UGc3.0脚本Wiki[剧情动画模块管理接口 Timeline]
开发语言·数据结构·算法·游戏·lua
未来之窗软件服务1 小时前
计算机考试-C语言 应用题—东方仙盟
c语言·开发语言·仙盟创梦ide·东方仙盟·计算机考试
想你依然心痛1 小时前
AtomCode在后端开发中的实战体验:Go微服务从零搭建
开发语言·微服务·golang
尘中远1 小时前
【Qwt 7.0 系列】交互功能详解 —— 平移、缩放、坐标轴交互与数据拾取
qt·数据可视化·绘图·qcustomplot·qwt·科学绘图
我是一颗柠檬1 小时前
【Java项目技术亮点】EXPLAIN深度分析与慢查询治理
android·java·开发语言
luj_17681 小时前
草酸与烟酸对消化及糖代谢的影响解析
服务器·c语言·开发语言·经验分享·算法
fei_sun1 小时前
【SystemVerilog】SystemVerilog与C语言的接口
c语言·开发语言