有没有简单的方法来复制QPainter状态?

时间:2012-05-19 04:47:07

标签: qt

我想用QPainter实现cairo的push group / pop组,但是QPainter使用一个新的painterDevice重置其所有状态而begin(),所以我必须手动保存/恢复所有状态。

2 个答案:

答案 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对象,并在需要时重播它们。