目标
完成各节点间的连线
实现
由于涉及到要创建新的edge和删除edge,那么就得编写与之相关的代码。
增加删除Edge
这就需要调用node_scene.py里面的
方法,来实现edge的增加和删除,于是需要在node_edge.py里添加如下代码
self.scene.addEdge(self)
获取通过socket获取对应的edge
首先就需要让Item_socket中有socket的属性
将node_graphics_socket.py的代码改写为
使其获得输入的Socket对象属性
而在socket类中将传入自己
抓取第一个点
def leftMouseButtonPress(self,event):
item = self.getItemAtClick(event)
self.last_lmb_click_scene_pos = self.mapToScene(event.pos())
if type(item) is QDMGraphicsSocket:
if self.mode == MODE_NOOP:
self.mode = MODE_EDGE_DRAG
self.edgeDragStart(item)
return
if self.mode == MODE_EDGE_DRAG:
res = self.edgeDragEnd(item)
if res: return
super().mousePressEvent(event)
def edgeDragStart(self,item):
self.previousEdge = item.socket.edge
self.last_start_socket = item.socket
self.dragEdge = Edge(self.grScene.scene, item.socket,None,EDGE_TYPE_BEZIER)
对左键点击事件进行小小的修改,并且引入edgeDragStart方法来专门处理抓取开始的第一个点
首先,获取第一个socket的edge,如果有就获得的是Edge对象,如果没有,则返回的是None
接着获得该item的socket
最后创建一个Edge
接下来就是解决这个如何创建一个edge一端连接着开始的socket一端连接着鼠标左键的虚线
抓取过程连线动画
首先在node_graphics_edge.py
中
为edge添加一个新画笔,绘制虚线
self._pen_dragging = QPen(self._color)
self._pen_dragging.setStyle(Qt