2013-07-02 188 views
0

我覺得這個問題已經在某個地方回答過了,但是我找不到我生活中的答案(特別是因爲標題中的同義詞分散瞭解決方案)。我想要一個明確的答案,哪個是從場景中刪除QGraphicsItem的最佳方法。讓我們採取最簡單的方案:一個簡單的「橡皮筋」矩形。從QGraphicsScene中刪除/銷燬/刪除QGraphicsItem

from PyQt4 import QtGui, QtCore 

class Rubbery(QtGui.QGraphicsScene): 

    def mousePressEvent(self, event): 
    self.origin = event.scenePos() 
    self.rect = QtGui.QGraphicsRectItem(self.origin.x(), self.origin.y(), 0, 0, None, self) 

    def mouseMoveEvent(self, event): 
    self.rect.setRect(QtCore.QRectF(self.origin, event.scenePos()).normalized()) 

    def mouseReleaseEvent(self, event): 
    self.rect.setParentItem(None) 

app = QtGui.QApplication([]) 

scene = Rubbery() 
scene.setSceneRect(0,0,500,500) 
view = QtGui.QGraphicsView(scene) 
view.show() 

app.exec() 

如果你看看mouseReleaseEvent,那就是我遇到問題的地方。我想完全徹底地將其從場景中刪除並立即更新,但撥打self.update()什麼都不做。我希望立即反映這一變化。在PySide中,似乎del照顧好了事情,但這裏還不清楚。

選項: delsetParent(None) setParentItem(None) hide() + deleteLater()

回答

2

QGraphicsScene具有removeItem()方法:

def mouseReleaseEvent(self, event): 
    self.removeItem(self.rect) 

鼠標被釋放時該矩形將被立即刪除。

相關問題