Qt 有什么简单的方法可以复制QPainter状态吗?

Qt 有什么简单的方法可以复制QPainter状态吗?,qt,Qt,我想用QPainter实现cairo的push_group/pop_group,但QPainter在使用新的painter设备开始()时重置了其所有状态,因此我必须手动保存/还原所有状态。是的,请签出并重试 如果要在多个QPaint的使用寿命之间保存/恢复,必须手动执行。您可以创建一个类PainterState,该类封装painter状态(画笔、画笔、变换等),然后存储QStack 有一个QPainterState类,但它仅用于内部使用,我认为它仅用于单个QPainter。如果您对QPainte

我想用QPainter实现cairo的push_group/pop_group,但QPainter在使用新的painter设备开始()时重置了其所有状态,因此我必须手动保存/还原所有状态。

是的,请签出并重试

如果要在多个QPaint的使用寿命之间保存/恢复,必须手动执行。您可以创建一个类
PainterState
,该类封装painter状态(画笔、画笔、变换等),然后存储
QStack

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

是的,只要退房,就可以了

如果要在多个QPaint的使用寿命之间保存/恢复,必须手动执行。您可以创建一个类
PainterState
,该类封装painter状态(画笔、画笔、变换等),然后存储
QStack


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

构造QPaint对象时,可以将其绘制到一个平面。然后,它可以在需要时重新加载并绘制到真实的设备上

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对象排列在列表、堆栈等中,并在需要时重放它们。

构建QPaint对象时,您可以将其绘制到一个列表中。然后,它可以在需要时重新加载并绘制到真实的设备上

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对象排列在列表、堆栈等中,并在需要时重播它们。

那么,当我在新设备上开始()时,保存的状态仍然存在?save()begin()restore()可以吗?@feverzsj我不这么认为。如果使用多个设备,则必须自己管理状态。但是,正如我所说,创建自己的
QStack
应该很容易。那么,当我在新设备上开始()时,保存的状态仍然存在?save()begin()restore()可以吗?@feverzsj我不这么认为。如果使用多个设备,则必须自己管理状态。但是,正如我所说,创建自己的
QStack
应该很容易。