Qt QPaint::save()和QPaint::restore()做什么?
我不确定调用Qt QPaint::save()和QPaint::restore()做什么?,qt,Qt,我不确定调用save()和restore()时,QPainter会做什么 它是保存正在绘制的图像,还是只保存诸如penWidth和color等信息? 我可以用它来恢复以前绘画活动的图像吗?来自: 您可以随时通过调用save()函数保存QPaint的状态,该函数将所有可用设置保存在内部堆栈上。restore()函数将它们弹出 所有这些设置都列在给定的链接上。因此,它只是保存绘制设置,而没有实际绘制的内容。如果经常使用save/restore,最好有一个小RAII类(“PainterSaver”),
save()
和restore()
时,QPainter
会做什么
它是保存正在绘制的图像,还是只保存诸如penWidth
和color
等信息?我可以用它来恢复以前绘画活动的图像吗?来自: 您可以随时通过调用save()函数保存QPaint的状态,该函数将所有可用设置保存在内部堆栈上。restore()函数将它们弹出
所有这些设置都列在给定的链接上。因此,它只是保存绘制设置,而没有实际绘制的内容。如果经常使用save/restore,最好有一个小RAII类(“PainterSaver”),以确保每个save()(在ctor中完成)都有一个对应的restore()调用(在dtor中完成),否则可能会遇到严重的“不平衡保存/恢复”错误。由于您可能正在更改油漆的颜色和样式或任何其他设置,您通常希望退出油漆功能时使用的设置与进入时相同。因此,在更改画师设置之前使用
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()
从堆栈中提取状态并更改设置以匹配该状态。(有关相同概念,请参阅QMutexLocker)我们得到了QSignalBlocker
。我真的很想知道为什么我们从来没有一个QPainterStateRestorer
?更详细地说,这可以让你做一些事情,例如:你设置一支笔,做一些绘图,保存,更换笔,做一些绘图,恢复,用原始笔再做一些绘图。链接失效,也许你可以在答案中包含列表?