我不确定QPainter
在调用save()
和restore()
时的作用。
是保存正在绘制的图片还是只保存penWidth
和color
等信息?
我可以用它来恢复上一个绘画事件的图像吗?
答案 0 :(得分:9)
您可以通过调用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中完成)是很好的),否则可能会遇到令人讨厌的“不平衡保存/恢复”错误。