我想用QPainter实现cairo的push group / pop组,但是QPainter使用一个新的painterDevice重置其所有状态而begin(),所以我必须手动保存/恢复所有状态。
答案 0 :(得分:4)
是的,只需查看QPainter::save()
和QPainter::restore()
。
如果要在多个QPainters的生命周期之间保存/恢复,则必须手动执行。您可以创建一个类PainterState
来封装画家状态(笔,画笔,变换等),然后存储QStack<PainterState>
。
有一个QPainterState类,但它仅供内部使用,我认为它仅适用于单个QPainter。如果您对QPainterState成员感兴趣,请查看源代码(“qpainter_p.h”)(此处复制太多)。
答案 1 :(得分:0)
构造QPainter对象时,可以将其绘制为QPicture。然后它可以在需要时重新加载并绘制到真正的QPaintDevice。
QPicture picture;
QPainter painterQueued;
painterQueued.begin(&picture); // paint in picture
painterQueued.drawEllipse(10,20, 80,70); // draw an ellipse
painterQueued.end(); // painting done
QImage myImage;
QPainter painterTarget;
painterTarget.begin(&myImage); // paint in myImage
painterTarget.drawPicture(0, 0, picture); // draw the picture at (0,0)
painterTarget.end(); // painting done
您可以在列表,堆栈等中排队许多QPicture对象,并在需要时重播它们。