Python QM油漆延迟

Python QM油漆延迟,python,pyside,qgraphicsview,qgraphicsitem,qpainter,Python,Pyside,Qgraphicsview,Qgraphicsitem,Qpainter,可能的原因是什么?当我放大QGraphicsView并移动QGraphicsSitem时,我得到了一个奇怪的结果。如果我再次缩放或平移视图,或者如果我关注其他小部件,它会更新。我在用PySide。画家的作用是这样的 def paint(self, painter, option, widget): if self.isSelected(): brush = self.highlight_brush pen = self.highlight_pen

可能的原因是什么?当我放大QGraphicsView并移动QGraphicsSitem时,我得到了一个奇怪的结果。如果我再次缩放或平移视图,或者如果我关注其他小部件,它会更新。我在用PySide。画家的作用是这样的

def paint(self, painter, option, widget):
    if self.isSelected():
        brush = self.highlight_brush
        pen = self.highlight_pen
    else:
        brush = self.dormant_brush
        pen = self.dormant_pen

    painter.setBrush(brush)
    painter.setPen(pen)

    painter.drawRect(0, 0, 100, 100)

为什么即使是这个基本的绘画活动也会发生这种情况?如果没有笔,就看不出这个问题。如果我增加画笔宽度,这个问题就会令人不安地显现出来。

我不知道这个渲染工件的实际解决方案。但是,在mouseMoveEvent期间更新视图确实解决了这个问题

 def mouseMoveEvent(self, event):
    QGraphicsView.mouseMoveEvent(self, event)
    if self.scene().selectedItems():
        self.update()

我不知道这种渲染工件的实际解决方案。但是,在mouseMoveEvent期间更新视图确实解决了这个问题

 def mouseMoveEvent(self, event):
    QGraphicsView.mouseMoveEvent(self, event)
    if self.scene().selectedItems():
        self.update()

您看到的错误可能是因为您正在绘制的部分位于边界矩形之外。我的猜测是,您正在使用与计算边界矩形相同的值来计算正在绘制的矩形。然后,使用钢笔将使绘制的矩形比边界宽,因此将导致您看到的污迹。

您看到的错误可能是因为您正在绘制的部分在边界矩形之外。我的猜测是,您正在使用与计算边界矩形相同的值来计算正在绘制的矩形。然后,使用钢笔将使绘制的矩形比边界更宽,因此将导致您看到的污迹。

我也有同样的问题。这是我的解决方案:

正如@Nathan Mooth所说,问题是我在boundingRect之外绘制,所以我只是将我的圆角矩形(我在paint()方法中绘制的)比boundingRect的宽度和高度小10个单位:

 # Setup Rect
        frameRect = self.boundingRect()
        frameRect.setWidth(self.boundingRect().width() - 10)
        frameRect.setHeight(self.boundingRect().height() - 10)


注意:我添加了颜色选择并更改了阴影的颜色。所以看起来有点不同。

我也有同样的问题。这是我的解决方案:

正如@Nathan Mooth所说,问题是我在boundingRect之外绘制,所以我只是将我的圆角矩形(我在paint()方法中绘制的)比boundingRect的宽度和高度小10个单位:

 # Setup Rect
        frameRect = self.boundingRect()
        frameRect.setWidth(self.boundingRect().width() - 10)
        frameRect.setHeight(self.boundingRect().height() - 10)


注意:我添加了颜色选择并更改了阴影的颜色。所以它看起来有点不同。

我昨天查看了一下,我怀疑这是因为视图需要以某种方式通知它需要更新,但看不到“正确”的方法是什么。大概当这些项调用update()时,它们会向属于redraw的视图发出信号?事实上,我上面发布的mouseMoveEvent属于该视图。由于工件仅在选定对象时发生,因此在鼠标移动期间(当存在活动选择时)更新视图确实可以解决问题。但是,我仍然不明白为什么会发生这种情况。正如我上面提到的,当没有penI的时候,绝对没有问题。昨天我仔细研究了一下,我怀疑这是因为视图需要以某种方式被通知它需要更新,但是看不到“正确”的方法是什么。大概当这些项调用update()时,它们会向属于redraw的视图发出信号?事实上,我上面发布的mouseMoveEvent属于该视图。由于工件仅在选定对象时发生,因此在鼠标移动期间(当存在活动选择时)更新视图确实可以解决问题。但是,我仍然不明白为什么会发生这种情况。正如我上面提到的,没有笔绝对没有问题