2014-01-28 48 views
0

當通過QT和Pyside創建QGraphicsItem時,可以使用childItem.setParentItem(parentItem)來設置它的父級。如果在父級上設置了ItemIsMoveable標誌,則拖動父級將轉換父級及其所有子級。可移動的QGraphicsItem父級但不是子級QGraphicsItem

在我的使用案例中,我希望能夠從父級內的任何位置拖動父級和子級,但不能在子級內拖動父級和子級。點擊並拖動孩子時,我想要採取不同的操作。例如,如果製作節點圖編輯器,可以拖動節點及其連接點,但是從連接點向外拖動時會創建圖形邊緣。

這可以使用內置的QT標誌來完成,還是需要重載父項的鼠標移動事件?我起初走下了超載路線,但感覺好像我可能正在與已經內置的東西搏鬥。

+0

我想我可能沒有足夠好的搜索。 [這個問題](http://stackoverflow.com/questions/13273785/only-move-qgraphicsitem-when-mouse-in-specific-region?rq=1)幾乎是相同的。我會嘗試實施,如果它看起來不錯,我會回答這個問題,或者根據我找到的結果關閉它。我不介意討論最「QT」的做法,但這可能是重複的。 – superlou

+0

只是爲孩子提供'mousePressEvent'(可能還有其他鼠標事件)的空實現。然後,小孩將在他的範圍內偷走所有鼠標事件。 –

回答

0

Marek R的答案是我找到的最乾淨的。只需在孩子中實施mousePressEvent以防止其導致父母的移動行爲:

class Child(QtGui.QGraphicsItem): 
    def __init__(self, name): 
    super(Child, self).__init__() 

    def mousePressEvent(self, event): 
    pass