2017-10-11 131 views
0

我正在寫一個圖形用戶界面,應該顯示在二維座標系統,用戶可以選擇和拖動系統的實體。該系統是鏡像對稱的w.r.t. x和y軸。目前,我使用QGraphicsRectItem繼承實體,以便可以在座標系的第一個象限(x> 0,y> 0)中拖動它。我重新實現了paint方法,用painter.drawRectangle()繪製另外三個矩形。所以當我移動象限1中的實體時,其他三個象限中的元素執行鏡像運動。這很好。最明智的方式來繪製對稱QGraphicsRectItems

An entity and its symmetry partner in the other three quadrants. The entity can be subdivided, and that needs to be extended to the other three partners.

在下一階段,每個實體可被細分,即由數百矩形的。所以我需要繪製數百個矩形和四個鏡像操作。天真的方法需要四個for循環,但我想知道是否有更聰明的方式在QT中做到這一點。 For循環因爲使用PyQt而受到一點傷害。

+0

可能應該重新繪製這個而不是重複項目。我現在不能寫出正確的答案,但是......我認爲你可以繼承QGraphicsScene及其繪圖事件,將QPainter縮放-1並再次調用基本實現 –

+0

是的,我認爲這應該是可能的,但那仍然會需要所有的for循環。也許我應該更好地說出我的問題。我正在思考一個blit操作,或者像OpenGL這樣的顯示列表,這對Qt來說是快速和內部的。 – zeus300

+1

生成單個圖像(一個循環)並將其渲染四次(或更多次)如何?例如,生成一個'QImage',使用相同的圖像創建多個'QGraphicsPixmapItem'並將它們放在你的場景中。 – vahancho

回答

1

如果您的繪圖操作太慢,您可以做的最簡單的事情就是繪製圖像,然後從圖像中簡單地繪製緩存的繪畫4次,這將非常快,因爲它只會複製一些像素值。

緩存不是基於項目的繪製結果,而是緩存網格的象限可能是有效的。這樣,如果您放大並且項目數量龐大或數量龐大,則不會浪費大量內存,而只需要一個圖像緩存即象限的屏幕大小。

這實際上取決於你想達到的目標,目前在描述中還不完全清楚,而且你的圖像也沒有顯示出來。

+0

我想知道爲什麼我的圖像沒有顯示。對不起。我在頁面渲染中看到它。 – zeus300