我觉得这个问题之前已经在某个地方得到了回答,但我找不到我一生的答案(特别是因为标题中的同义词传播了解决方案)。我想要一个明确的答案,哪个是从场景中删除 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
处理得很好,但这里还不清楚。
选项:
del
setParent(None)
setParentItem(None)
hide() + deleteLater()