我有一個惱人的時間試圖繞過'推薦'做某事的方式。QGraphicsItem:爲什麼沒有`stackAfter`方法?
所以,我有一堆卡。我想要這樣做,以便在處理卡片時,它成爲整個場景中最後繪製的對象(典型的bring_to_front
功能)。
推薦的方法是隻添加到對象的zValue
,直到它比所有其他的都大,但我希望取消相當「懶惰」的整數,在整個地方運行,明智地使用stackBefore
方法,該方法模擬重新組織對象添加到場景的順序。
當我在一個有限的集合中刷洗我的卡片時(獲得所選項目的列表,random.shuffle,對於item item.stackBefore(下一個項目)),這個工作方式非常好,但當它涉及到將卡冒泡到整個場景的頂部。
我認爲添加對象的副本到場景,然後刪除原來的,但它看起來像我應該能夠做stackAfter
像使用Python列表(或insertAt
什麼的)。
示例代碼:
def deal_items(self):
if not self.selection_is_stack():
self.statusBar().showMessage("You must deal from a stack")
return
item_list = self.scene.sorted_selection()
for i,item in enumerate(item_list[::-1]):
width = item.boundingRect().width()
item.moveBy(width+i*width*0.6,0)
another_list = self.scene.items()[::-1]
idx = another_list.index(item)
for another_item in another_list[idx+1:]:
another_item.stackBefore(item)
這工作。這似乎有點......醜陋。
也許有像'setZValue = 0'自動將對象在與zValue == 0所有對象的最終一招?我不知道 – RodericDay 2013-02-26 05:09:23