【问题标题】:How to remove QRect from QGraphicsScene如何从 QGraphicsScene 中删除 QRect
【发布时间】:2019-11-15 00:17:15
【问题描述】:

我有一个带有一堆 QRect 的 QGraphicsScene。我使用 QRects 作为 QPixmap 上的叠加层来显示检测到的对象。我需要清除场景中的所有矩形,但不知道怎么做。

在不重绘图像的情况下清除 QGraphicsScene 中的所有 QRect 的最佳方法是什么?

现在我在将 QRects 添加到场景时保留一个列表,然后为了清除我尝试遍历所有 rects 并使用 QGraphicsScene.removeItem(rect) 删除矩形,但这并没有工作。我收到以下错误:

TypeError: removeItem(self, QGraphicsItem): argument 1 has unexpected type 'QRectF'

我猜 QRect 不是图形项。但是我应该如何将它从现场移除。下面是我添加或(尝试)删除矩形的代码:

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 中移除 QRects 的正确方法是什么?

【问题讨论】:

    标签: python pyqt pyqt5 qgraphicsscene


    【解决方案1】:

    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)
                    rect_item = self.scene.addRect(rect)
                    text = self.scene.addText(str(track_id))
                    text.setPos(x, y)
                    self.rects.append(rect_item)
                else:
                    for rect in self.rects:
                        self.scene.removeItem(rect)
                    self.rects = []

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多