QPainter :: save()和QPainter :: restore()有什么作用?

时间:2010-06-10 17:10:10

标签: qt

我不确定QPainter在调用save()restore()时的作用。

是保存正在绘制的图片还是只保存penWidthcolor等信息? 我可以用它来恢复上一个绘画事件的图像吗?

3 个答案:

答案 0 :(得分:9)

来自the documentation

  

您可以通过调用save()函数随时保存QPainter的状态,该函数会保存内部堆栈上的所有可用设置。 restore()函数将它们弹回。

所有这些设置都列在给定的链接中。所以它只是保存了油漆设置而没有实际绘制的任何东西。

答案 1 :(得分:8)

由于您可能正在更改颜色和样式或任何其他颜色设置,因此您通常希望使用与进入时相同的设置退出绘制功能。因此,在更改之前使用QPainter::save()使用更改后的设置完成绘图后,画家设置和QPainter::restore()例如

void paint( QPainter* painter,
            const QStyleOptionGraphicsItem* option,
            QWidget* widget = 0 )
{
    // Painter has certain settings 
    painter->save();
    QPen pen = painter->pen();
    pen.setColor(QColor(200,20,20);
    // Changing settings of painter
    painter->setPen(pen);
    // ... Draw
    painter->restore();
    // Painter has same settings as on entry into this function
}

painter->save()将画家的状态置于堆栈中,painter->restore()从堆栈中拉出状态并更改设置以匹配该状态。

答案 2 :(得分:3)

如果使用保存/恢复很多,那么有一个RAII类(“PainterSaver”)以确保每个save()(在ctor中完成)都有相应的restore()调用(在dtor中完成)是很好的),否则可能会遇到令人讨厌的“不平衡保存/恢复”错误。