0

我想用 QPainter 实现 cairo 的 push_group/pop_group,但是 QPainter 在 begin() 使用新的painterDevice 时重置了它的所有状态,所以我必须手动保存/恢复所有状态。

4

2 回答 2

4

是的,只需检查QPainter::save()QPainter::restore()

如果要在多个 QPainter 的生命周期之间保存/恢复,则必须手动进行。您可以只创建一个PainterState封装画家状态(笔、画笔、变换等)的类,然后存储一个QStack<PainterState>.

有一个 QPainterState 类,但它仅供内部使用,我认为它仅适用于单个 QPainter。如果您对 QPainterState 成员感兴趣(此处复制太多),请参阅源代码(“qpainter_p.h”)。

于 2012-05-19T04:51:49.560 回答
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 对象排列在列表、堆栈等中,并在需要时重播它们。

于 2017-04-11T11:06:46.670 回答