2012-05-19 82 views

回答

4

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

如果要在多个QPainters的使用寿命之间进行保存/恢复,则必须手动完成。您可以创建封装画家状态(笔,画笔,变换等)的类PainterState,然后存储QStack<PainterState>

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

+0

所以,当我开始()在一个新的设备上,保存的状态将仍然存在? save()begin()restore()会做这个工作吗? – feverzsj

+0

@feverzsj我不这么认为。如果您使用多个设备,则必须自己管理状态。但是,正如我所说,创建自己的'QStack '应该很容易。 – Anthony

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

相关问题