当我调用save()和restore()时,我不确定QPainter做了什么。
它是在保存它正在绘制的图像,还是只是像penWidth和color一样保存信息?
我可以使用它来恢复上一个paint事件的图像吗?
发布于 2010-06-11 01:49:37
保存您可以在任何时候通过调用
()函数保存QPainter的状态,该函数将所有可用的设置保存在一个内部堆栈上。restore()函数将它们弹出。
所有这些设置都列在给定的链接处。因此,它只是保存绘制设置,而不保存实际绘制的内容。
发布于 2010-06-11 21:22:19
由于您可能正在更改画图的颜色和样式或任何其他设置,因此您通常希望使用与进入时相同的设置退出画图功能。因此,您可以在更改绘制器设置之前使用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()从堆栈中提取状态并更改设置以与之匹配。
发布于 2010-06-11 04:49:46
如果经常使用保存/恢复,最好有一个小RAII类("PainterSaver")来确保每个save() (在ctor中完成)都有一个相应的restore()调用(在dtor中完成),否则可能会遇到严重的“不平衡保存/恢复”错误。
https://stackoverflow.com/questions/3016709
复制相似问题