如何从 QGraphicsScene 中删除 QRect
How to remove QRect from QGraphicsScene
我有一个带有一堆 QRect 的 QGraphicsScene。我使用 QRects 作为 QPixmap 的叠加层来显示检测到的对象。我需要清除场景中的所有矩形,但不知道如何操作。
在不重绘图像的情况下从 QGraphicsScene 中清除所有 QRect 的最佳方法是什么?
现在我保留了一个 QRects 列表,因为我将它们添加到场景中,然后清除我尝试遍历所有 rects 并使用 QGraphicsScene.removeItem(rect) 删除矩形,但是那行不通。我收到以下错误:
TypeError: removeItem(self, QGraphicsItem): argument 1 has unexpected type 'QRectF'
我猜 QRect 不是图形项目。但是我应该如何将它从场景中删除。下面是我添加或(尝试)删除 Rects 的代码:
if self.is_viewing_tracks:
for track_id, positions in self.tracks.items():
for frameno, pos in positions.items():
if int(frameno) == self.frameno:
x, y = pos
rect = QRectF(x-5, y-5, 10, 10)
self.scene.addRect(rect)
text = self.scene.addText(str(track_id))
text.setPos(x, y)
self.rects.append(rect)
else:
for rect in self.rects:
self.scene.removeItem(rect)
从 QGraphicsScene 中删除 QRect 的正确方法是什么?
QRectFs 没有添加到 QGraphicsScene 中,而是用于通过 addRect() 方法创建 QGraphicsRectItem,因此您必须删除 QGraphicsRectItem 而不是 QRectF。解决方案是将 QGraphicsRectItems 存储在 self.rects:
if self.is_viewing_tracks:
for track_id, positions in self.tracks.items():
for frameno, pos in positions.items():
if int(frameno) == self.frameno:
x, y = pos
rect = QRectF(x - 5, y - 5, 10, 10)
<b>rect_item = self.scene.addRect(rect)</b>
text = self.scene.addText(str(track_id))
text.setPos(x, y)
<b>self.rects.append(rect_item)</b>
else:
for rect in self.rects:
self.scene.removeItem(rect)
<b>self.rects = []</b>
我有一个带有一堆 QRect 的 QGraphicsScene。我使用 QRects 作为 QPixmap 的叠加层来显示检测到的对象。我需要清除场景中的所有矩形,但不知道如何操作。
在不重绘图像的情况下从 QGraphicsScene 中清除所有 QRect 的最佳方法是什么?
现在我保留了一个 QRects 列表,因为我将它们添加到场景中,然后清除我尝试遍历所有 rects 并使用 QGraphicsScene.removeItem(rect) 删除矩形,但是那行不通。我收到以下错误:
TypeError: removeItem(self, QGraphicsItem): argument 1 has unexpected type 'QRectF'
我猜 QRect 不是图形项目。但是我应该如何将它从场景中删除。下面是我添加或(尝试)删除 Rects 的代码:
if self.is_viewing_tracks:
for track_id, positions in self.tracks.items():
for frameno, pos in positions.items():
if int(frameno) == self.frameno:
x, y = pos
rect = QRectF(x-5, y-5, 10, 10)
self.scene.addRect(rect)
text = self.scene.addText(str(track_id))
text.setPos(x, y)
self.rects.append(rect)
else:
for rect in self.rects:
self.scene.removeItem(rect)
从 QGraphicsScene 中删除 QRect 的正确方法是什么?
QRectFs 没有添加到 QGraphicsScene 中,而是用于通过 addRect() 方法创建 QGraphicsRectItem,因此您必须删除 QGraphicsRectItem 而不是 QRectF。解决方案是将 QGraphicsRectItems 存储在 self.rects:
if self.is_viewing_tracks:
for track_id, positions in self.tracks.items():
for frameno, pos in positions.items():
if int(frameno) == self.frameno:
x, y = pos
rect = QRectF(x - 5, y - 5, 10, 10)
<b>rect_item = self.scene.addRect(rect)</b>
text = self.scene.addText(str(track_id))
text.setPos(x, y)
<b>self.rects.append(rect_item)</b>
else:
for rect in self.rects:
self.scene.removeItem(rect)
<b>self.rects = []</b>