如何从qgraphicscen中删除QRect

2024-07-04 07:32:43 发布

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

我有一个有一堆心电图的基因。我使用QRects作为QPixmap上的覆盖来显示检测到的对象。我需要清理现场所有的矩形,但不知道怎么清理。你知道吗

在不重新绘制图像的情况下,从Qgraphicscene中清除所有QRECT的最佳方法是什么?

现在我保存了一个qrect列表,当我把它们添加到场景中,然后为了清除它们,我尝试循环遍历所有的rect并使用qgraphicscene.removietem文件(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)

从qgraphicscene中去除QRects的正确方法是什么?


Tags: 方法inrectselfforifscene现场
1条回答
网友
1楼 · 发布于 2024-07-04 07:32:43

QRectFs不会添加到qgraphicscene,而是通过addRect()方法用于创建QGraphicsRectItem,因此必须删除QGraphicsRectItem而不是QRectF。解决方案是将QGraphicsRectItems存储在自选矩形地址:

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 = []

相关问题 更多 >

    热门问题