我想用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