我想用 QPainter 实现 cairo 的 push_group/pop_group,但是 QPainter 在 begin() 使用新的painterDevice 时重置了它的所有状态,所以我必须手动保存/恢复所有状态。
问问题
1102 次
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 回答