Python QGraphicsView将一行连接到另一个QGraphicsCenter项

Python QGraphicsView将一行连接到另一个QGraphicsCenter项,python,pyqt,Python,Pyqt,我正在扩展Qt的QGraphicsView框架,以创建一个交互式形状生成器。当您单击并拖动时,它会创建一个带有bezier控制柄的控制点,以影响其曲线(与Photoshop中的路径相同) 控制点和两个贝塞尔控制点有单独的项。我正在努力寻找一种方法来显示贝塞尔手柄的线段,从贝塞尔点到控制点 顶部的直贝塞尔线示例: 最好的展示方式是什么?我试图覆盖paintEvent,它画出的线很好,但是视图的某些部分不清晰,并且变得有点古怪 下面是代码的样子: def paintEvent(self, even

我正在扩展Qt的QGraphicsView框架,以创建一个交互式形状生成器。当您单击并拖动时,它会创建一个带有bezier控制柄的控制点,以影响其曲线(与Photoshop中的路径相同)

控制点和两个贝塞尔控制点有单独的项。我正在努力寻找一种方法来显示贝塞尔手柄的线段,从贝塞尔点到控制点

顶部的直贝塞尔线示例:

最好的展示方式是什么?我试图覆盖paintEvent,它画出的线很好,但是视图的某些部分不清晰,并且变得有点古怪

下面是代码的样子:

def paintEvent(self, event):

    painter = QtGui.QPainter(self.viewport())

    if self.points:
        painter.begin(self)
        painter.fillRect(self.viewport().rect(), QtGui.QBrush(QtGui.QColor(50, 50, 50)))
        for point in self.points:
            if point.point_type != ControlPoint.Bezier:
                continue

            painter.drawLine(point.handle_1.pos().x(), point.handle_1.pos().y(), 
                             point.handle_2.pos().x(), point.handle_2.pos().y());
        painter.end()

    QtGui.QGraphicsView.paintEvent(self, event)

还是为行本身创建项的更好方法?感谢您的洞察力

这是我目前的解决方案。我正在对qgraphicscene.drawForeground进行子分类,以绘制任何贝塞尔点之间的所有线。唯一不好的是,我必须更新整个视口,否则它不会清除所有以前的绘图。所以这可能会在以后的表演中击中我的脚

除此之外,它工作得非常完美,即使在移动点的时候,我也会得到一个很好的片段

def drawForeground(self, painter, rect):
    view = self.views()[0]

    # Forces whole view to update instead of partial.
    view.viewport().update()

    painter.begin(view)

    if view.points:
        pen = QtGui.QPen(QtCore.Qt.white, 1, QtCore.Qt.DashLine)
        painter.setPen(pen)

        for point in view.points:
            if point.point_type != ControlPoint.Bezier:
                continue

            painter.drawLine(point.handle_1.pos().x(), point.handle_1.pos().y(), 
                             point.handle_2.pos().x(), point.handle_2.pos().y());
    painter.end()

    return QtGui.QGraphicsScene.drawBackground(self, painter, rect)