开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 155|回复: 1
收起左侧

[C/C++] 怎么永久移除Visual Studio的弃用警告 C4996

[复制链接]
结帖率:90% (18/20)
发表于 昨天 22:13 | 显示全部楼层 |阅读模式   山东省临沂市
100精币
更新QT库版本后新建项目直接弹出报错
严重性        代码        说明        项目        文件        行        抑制状态        详细信息
错误        C4996        'QCoreApplication::compressEvent': This feature will be removed in Qt 7        QtWidgetsApplication7        E:\Qt\6.11.1\msvc2022_64\include\QtGui\qguiapplication.h        167               
问了ai说是即将弃用的浸膏不是报错
已尝试但无效的解决方法:
  • 在 %LOCALAPPDATA%\QtMsBuild\qt_defaults.props 中添加 /sdl- /wd4996 /WX-(通过 AdditionalOptions 或 PreprocessorDefinitions),确认 .vcxproj 中已有 <Import Project="$(QtMsBuild)\qt_defaults.props" />。
  • 修改 E:\Qt\6.11.1\msvc2022_64\mkspecs\common\msvc-desktop.conf,添加:
    [size=12.573px]text



    DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060800QMAKE_CXXFLAGS += /WX- /wd4996
    并执行了项目的 Reconvert Project。
  • 创建 VS 全局属性表(.props 文件),在 C/C++ → 常规 → SDL 检查 中设为否 (/sdl-),在 C/C++ → 高级 → 禁用特定警告 中填入 4996,并在 预处理器定义 中添加 QT_NO_DEPRECATED_WARNINGS,然后将该属性表添加到项目。
  • 直接编辑 qguiapplication.h 和 qapplication.h,删除 QT_DEPRECATED_VERSION_X_6_10(...) 这一行(仅保留函数声明),保存后仍报 C4996。





补充内容 (2026-5-20 01:06):
已解决:右键项目->配置改成:所以配置 然后C++->常规->SDL检查 改成否


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值
结帖率:99% (83/84)

签到天数: 20 天

发表于 昨天 22:35 | 显示全部楼层   河北省廊坊市
我也问了一下AI
你遇到的 C4996 错误是因为 Qt 6.11.1 中 QCoreApplication::compressEvent 被标记为废弃(deprecated),且提示将在 Qt 7 中移除。你的项目可能开启了“将警告视为错误”(/WX 或 /sdl),导致这个废弃警告直接变成了编译错误。

快速解决(立即让项目通过编译):

方法一:在项目文件里全局禁用该警告
如果你使用 qmake,在 .pro 文件中添加:

qmake
QMAKE_CXXFLAGS += /wd4996
如果你使用 CMake,在 CMakeLists.txt 中添加:

cmake
add_compile_options(/wd4996)
然后重新构建。

方法二:在代码中局部禁用
在包含任何 Qt 头文件之前加入:

cpp
#pragma warning(push)
#pragma warning(disable:4996)
#include <QApplication>   // 或其他 Qt 头文件
#pragma warning(pop)
如果错误来自你自己的代码调用了 compressEvent,那么只需在调用它的函数前后用上述 pragma 包围即可。

根本原因排查:
报错指向 qguiapplication.h 第 167 行,说明即使你“新建项目”没有显式调用该函数,也可能因为项目模板或 Qt 内部头文件间接使用了它。你可以:

在整个解决方案中搜索 compressEvent,看看是否是你自己(或模板生成的代码)不小心调用了。

如果确认没有主动调用,那可能是 Qt 自身的元对象系统或某些工具类还在内部使用。此时用上面的局部或全局禁用方法是最务实的,等待 Qt 官方后续版本修复内部调用。

额外建议:
检查你的项目是否开启了“SDL 检查”(/sdl)或“将警告视为错误”(/WX)。如果不需要这么严格的设置,可以在项目属性 → C/C++ → 常规中,将“SDL 检查”设为 否,或者在“将警告视为错误”中移除 /WX,这样 C4996 就只会是警告而不阻碍编译。

最终,长期来看你需要关注 Qt 官方更新,确保未来迁移到 Qt 7 时代码不再依赖已移除的 API。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表