从qgraphicscen中删除/销毁/删除QGraphicsItem

2024-05-19 07:41:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我觉得这个问题以前在某个地方得到过回答,但我一辈子都找不到答案(特别是因为标题中的同义词传播着解决方案)。我想要一个明确的答案,哪种是从场景中删除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()


Tags: 答案rectselfnoneeventdef场景origin

热门问题