宁波建设信息网站,简单的静态网站首页,南通做网站,wordpress 邮箱登录1. 问题
项目卡中遇到编译报错#xff0c; 错误 C2039 “intersect”: 不是“QRect”的成员 。
2. 排查过程
排查到依赖的第三方代码#xff0c;使用 intersect 接口#xff0c; 跟踪排查到头文件中使用了***#if QT_DEPRECATED_SINCE(5, 0)***
#if QT_DEPRECATED_SINCE…1. 问题
项目卡中遇到编译报错 错误 C2039 “intersect”: 不是“QRect”的成员 。
2. 排查过程
排查到依赖的第三方代码使用 intersect 接口 跟踪排查到头文件中使用了***#if QT_DEPRECATED_SINCE(5, 0)***
#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); }
#endiffriend 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_BEFORE0x050100 支持Qt5.1, 那我们要支持Qt4 可以限定 在pro文件中添加
DEFINES QT_DISABLE_DEPRECATED_BEFORE0x040900 //支持使用最低4.9版本接口我这里使用cmake编译在CMakeLists.txt中添加
ADD_DEFINITIONS(-DQT_DISABLE_DEPRECATED_BEFORE0x040900)4.拓展
至此这问题就解决了第二个方法就比较通用了。
DEFINES QT_DISABLE_DEPRECATED_BEFORE0x040900 //支持qt4.9
DEFINES QT_DISABLE_DEPRECATED_BEFORE0x050000 //支持qt5.0
DEFINES QT_DISABLE_DEPRECATED_BEFORE0x050F00 //支持qt5.15
DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 //支持qt6.0我们用这个宏就可以做一些事情了比如多个开发团队统一代码版本升级代码等工作了。