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