简单介绍一下,不多说,懂得都懂,避坑
SignalHandler 类:
这个类继承自 QObject,并且定义了一个 positionChanged 信号。
DraggableEllipseItem 类:
这个类继承自 QGraphicsEllipseItem,并且拥有一个 signal_handler 属性,该属性是一个 SignalHandler 实例。
在 mouseMoveEvent 方法中,当圆点移动时,触发 signal_handler 的 positionChanged 信号。
ExampleApp 类:
创建了两个 DraggableEllipseItem 圆点,并将它们添加到绘图场景中。
创建了一个 LineItem 对象,并将其添加到场景中。
连接 DraggableEllipseItem 的 signal_handler 的 positionChanged 信号到槽函数,当圆点移动时更新直线的起点和终点
LineItem 类
class LineItem(QGraphicsItem):
def init(self, start=QPointF(0, 0), end=QPointF(100, 100)):
super().init()
self.start = start
self.end = end
self.setFlag(QGraphicsItem.ItemIsMovable)
self.setFlag(QGraphicsItem.ItemIsSelectable)
def setStartPoint(self, point):
"""设置直线的起点。"""
self.start = point
self.update()
def setEndPoint(self, point):
"""设置直线的终点。"""
self.end = point
self.update()
def boundingRect(self):
"""定义绘制直线时的边界矩形。"""
extra = (self.pen().width() + 20) / 2.0
return QRectF(self.start, self.end).normalized().adjusted(-extra, -extra, extra, extra)
def shape(self):
"""返回直线的形状,用于碰撞检测。"""
path = QPainterPath()
pa