【发布时间】:2010-06-10 17:10:10
【问题描述】:
我不确定当我调用save() 和restore() 时QPainter 做了什么。
是保存正在绘制的图像还是只是保存penWidth 和color 等信息?
我可以用它来恢复之前绘制事件的图像吗?
【问题讨论】:
标签: qt
我不确定当我调用save() 和restore() 时QPainter 做了什么。
是保存正在绘制的图像还是只是保存penWidth 和color 等信息?
我可以用它来恢复之前绘制事件的图像吗?
【问题讨论】:
标签: qt
您可以随时通过调用 save() 函数来保存 QPainter 的状态,该函数将所有可用设置保存在内部堆栈中。 restore() 函数将它们弹回。
所有这些设置都列在给定的链接中。所以它只是保存了绘制设置,并没有实际绘制。
【讨论】:
由于您可能正在更改绘画的颜色和样式或任何其他设置,因此您通常希望以与进入时相同的设置退出绘画功能。因此,您在更改绘画设置之前使用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 的状态放在堆栈中,painter->restore() 从堆栈中拉出状态并更改设置以匹配它。
【讨论】:
如果一个人经常使用 save/restore,最好有一个小的 RAII 类(“PainterSaver”)来确保每个 save()(在 ctor 中完成)都有相应的 restore() 调用(在 dtor 中完成),否则可能会遇到令人讨厌的“不平衡保存/恢复”错误。
【讨论】:
QSignalBlocker。我真的很想知道为什么我们从来没有收到QPainterStateRestorer?