Я расширяю рамки Qt QGraphicsView Qt для создания интерактивного построителя фигур. Когда вы нажимаете и перетаскиваете, он создает контрольную точку с дескриптором bezier для выполнения своей кривой (так же, как и пути, скажем, Photoshop).QGraphicsView подключает линию к другому QGraphicsSceneItem
У меня есть отдельные элементы для контрольной точки и обе точки управления безье. Я изо всех сил пытаюсь отобразить сегмент линии дескриптора безье, который идет от точки безье к контрольной точке.
Пример прямой линии Безье на вершине:
Какой самый лучший подход, чтобы отобразить это? Я попытался переопределить 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)
Или это лучший подход, чтобы создать элемент для самой линии? Цените любое понимание!