Microsoft C++ 异常: CacheOverflowException,位于内存位置 0x00000059588F8F30 处。

今天解决了一个异常,查了好久,记录一下吧。

也没做啥,就给指定区域画了框,写了点文字,运行的时候,就会报异常。

后来才发现,是渲染导致的

QFont("Arial", 12, QFont::Bold) 加载 Arial 粗体字体时,Qt 字体引擎在「超大透明画布 + Windows 无边框 / 透明窗口」环境下触发了 GDI 缓存溢出,进而透传为误导性的 FileFormatException/CacheOverflowException;而改用系统内置的「SimHei(黑体)+ 非粗体 + 关闭文字抗锯齿」后,字体渲染复杂度大幅降低,缓存溢出条件不满足,异常彻底消失。

代码修改处:

原:

painter.setFont(QFont("Arial", 12, QFont::Bold));

修改后:

QFont font;
font.setFamily("SimHei"); // 用系统内置黑体(避免Qt加载自定义字体)
font.setPointSize(12);    // 固定字号(避免动态计算字号)
font.setBold(false);      // 禁用粗体(减少渲染复杂度)
painter.setFont(font);

重新编译运行,好了,没有异常了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值