目标
按住鼠标左键和crtl键进入切割模式,edge在被切割的路径上就会被切除
实现
定义一个新模式,切割模式
MODE_EDGE_CUT = 3
按下鼠标左键
由于需要按下鼠标左键和crtl,那么这个这个模式肯定是在view里的leftMouseButtonPress(self, event)
里判断并执行
则在leftMouseButtonPress(self, event)
新增代码
if item is None:
if event.modifiers() & Qt.ControlModifier:
self.mode = MODE_EDGE_CUT
fakeEvent = QMouseEvent(QEvent.MouseButtonRelease,event.localPos(),event.screenPos(),
Qt.LeftButton,Qt.NoButton,event.modifiers())
super().mouseReleaseEvent(fakeEvent)
QApplication.setOverrideCursor(Qt.CrossCursor)
return
因为点击是空白处,所以判断item是否为None
之后建立一个鼠标左键松开的假事件,并且将鼠标指针变为十字形
至于为什么要建立这个假事件,我也不太清楚,可能是为了以防冲突吧
最后return
绘制切割线
建立文件node_graphics_cutline.py
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import