为什么QPainter恢复导致段故障?

时间:2018-06-01 02:20:27

标签: qt segmentation-fault 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()的东西,并且我知道恢复()会弹出画家的设置。但是,我无法理解为什么恢复会导致段故障。有人可以帮我分析一下吗?非常感谢。

0 个答案:

没有答案