为什么缩放后qgraphicsview qgraphicsitem留下痕迹

Why after zooming qraphicsview qraphicsitem leaves traces

在缩放模式下移动对象时,对象开始留下痕迹,但在正常模式下一切正常。我认为这是一个 bouldingRect,但是我的一个问题提供了一个正常的实现。

我的MRE在这道题里

这是因为画轮廓的缘故,如果画在边框上,总是占据一半的笔宽。正如关于 boundingRect() 的文档所解释的那样:

Note: For shapes that paint an outline / stroke, it is important to include half the pen width in the bounding rect. It is not necessary to compensate for antialiasing, though.

由于您在初始化中指定了笔宽,因此可以使用该值:

    def boundingRect(self):
        return QRectF(
            -self.penWidth / 2, 
            -self.penWidth / 2, 
            self.w + self.penWidth, 
            self.h + self.penWidth)

请注意,您实际上 不是 在画家中使用那支笔,因此应该在 paint() 中使用 painter.setPen(QtGui.QPen(self.pen_color, self.penWidth)) 来完成更正确的实现功能。要稍微提高性能,请在 init 中创建一个 QPen 并将其直接用于 setPen().

另请注意,在画家(包括钢笔和画笔)中更改的每个设置都不应持久,因此最好记住在 [=13= 的开头放置一个 qp.save() ] 和 qp.restore() 返回前。