我想用QPainter来实现cairo的push_group/pop_group,但是QPainter在begin()与新的painterDevice时重置其所有状态,所以我必须手动保存/恢复所有状态。有没有简单的方法来复制QPainter状态?
0
A
回答
4
是的,只是检查出QPainter::save()
和QPainter::restore()
。
如果要在多个QPainters的使用寿命之间进行保存/恢复,则必须手动完成。您可以创建封装画家状态(笔,画笔,变换等)的类PainterState
,然后存储QStack<PainterState>
。
有一个QPainterState类,但它仅供内部使用,我认为它只能用于单个QPainter。如果您对QPainterState成员感兴趣,请参阅源代码(“qpainter_p.h”)(太多无法在此复制)。
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对象,并在需要时重播它们。
相关问题
- 1. 有没有简单的方法来获取当前状态的状态组或实际状态对象?
- 2. 有没有简单的方法来改变QTextEdit中的“文本更改”状态?
- 3. 有没有更好的方法来恢复SearchView状态?
- 4. drupal 6 cck字段:有没有简单的方法来复制cck字段?
- 5. 有没有简单的方法来验证复制文章是否正确?
- 6. 有没有简单的方法来动画ScrollableControl.ScrollControlIntoView方法?
- 7. 是否有更简单的方法来复制图像元素
- 8. 有没有一种简单的方法来模拟3D的心脏形状?
- 9. 简单的perl文件复制方法没有使用文件::复制
- 10. 有没有一种更简单的方法来操纵Coldfusion中的复选框?
- 11. 有没有一种简单的方法来重复一个PHP的MySQL查询?
- 12. 有没有一种简单的方法来改变web.config中的重复ConnectionStrings?
- 13. JavaScript的复选框容器 - 有没有更简单的方法来写这
- 14. 有没有简单的方法来检查重复的快捷键?
- 15. 有没有更简单的方法来运行与JavaScript的SQLite?
- 16. 我是新来的d3,有没有简单的方法?
- 17. 有没有简单的JavaScript方法来操纵任意的URL?
- 18. 有没有简单的方法来写在JavaScript中的Object.defineProperty
- 19. 有没有更简单的方法来解析Java中的Android?
- 20. 有没有简单的方法来查找Facebook用户的ID?
- 21. 有没有更简单的方法来设置UIView的高度?
- 22. 有没有简单的方法来查看FormCollection的内容?
- 23. 有没有简单的方法来改变django中的路径?
- 24. 有没有简单的方法来加载listmodel中的泛型?
- 25. 有没有简单的方法来自动截图的拍摄?
- 26. 有没有简单的方法来增加Map对象的值?
- 27. 有没有简单的方法来使用基类的变量?
- 28. 有没有简单的方法来使用Facebook的C#SDK?
- 29. 有没有简单的方法来使用Common Lisp的Python库?
- 30. 有没有简单的方法来生成类似的颜色?
所以,当我开始()在一个新的设备上,保存的状态将仍然存在? save()begin()restore()会做这个工作吗? – feverzsj
@feverzsj我不这么认为。如果您使用多个设备,则必须自己管理状态。但是,正如我所说,创建自己的'QStack'应该很容易。 –
Anthony