qt - QPainter 恢复为什么会导致段错误?
问题描述
我的程序有时(低概率)因以下信息回溯而崩溃:
Error: signal 11:
/ri/flamingo_console(_Z7handleri+0x174)[0x884a14]
/lib/libc.so.6(__default_sa_restorer_v2+0x0)[0xb5d3de60]
/lib/libc.so.6(memcpy+0x74)[0xb5d94124]
/ri/Qt5.5/lib/libQt5Core.so.5(_ZN7QString11reallocDataEjb+0x8c)
[0xb60f2f68]
/ri/Qt5.5/lib/libQt5Gui.so.5(+0x2f2284)[0xb6923284]
/ri/flamingo_console[0x5f75a8]
/ri/flamingo_console[0x54f6e4]
我使用addr2line的工具,发现0x5f75a8的文本地址在以下函数中:
void RElementStyle::drawText( QPainter &painter,
const QRect &rect,
const QString &str,
Qt::AlignmentFlag align )
{
painter.save();
painter.setPen( mCommon.getColor( mStatus, str) );
//! font
QFont font = qApp->font();
font.setPointSize( mCommon.mContentFont.mSize );
painter.setFont( font );
painter.drawText( rect,
align | Qt::AlignVCenter,
str );
painter.restore(); //! this is the crash line 0x54f6e4
}
我了解了有关painter.restore() 的一些东西,并且我知道restore() 会弹出painter 的设置。但是,我不明白为什么restore 会导致段错误。谁能帮我分析一下?非常感谢。
解决方案
推荐阅读
- java - UnsatisfiedDependencyException:创建名为“homeController”的 bean 时出错:通过字段“dao”表示不满足的依赖关系
- reactjs - 转义“导入”和 react/html 以在 MDX 中显示为文本?
- swift - SwiftUI 从 List 导航到不同的视图
- calendar - 如何在shamsi日历中找到公共日子?
- r - 我想将特定列中的值更改为 R 中的单个值
- artificial-intelligence - 在 Android 应用程序上集成 RASA 聊天机器人
- node.js - 即使我解决了聚合承诺,等待代码也不会在等待后执行
- python - python pygame - 多人游戏
- sql - 如何对clickhouse中的列进行算术更新?
- javascript - 在版本 9 上安装 @angular/cli 但随后报告版本 7