我试图模仿QML中的patcher接口,其中用户可以单击节点并以下面显示的方式将其连接到另一个节点:
https://youtu.be/rtgGol-I4gA?t=4m15s
最终在QML中连接这些节点将在相应的C图中设置指针 . 创建一个QML节点实例化一个C等价物,到目前为止一直很好 . 但对于该死的补丁本身,我找不到一个聪明的解决方案 .
我试图创建一个在第一次单击时实例化的“补丁”类,然后使用拖放连接到第二个 . 它提供了一个起点和终点,以便画布可以绘制补丁(线) . 初始 endpoints 本身,一旦点击第二个节点就会被修改...
import QtQuick 2.7
Item {
id: root
height: 30
width: 30
property Canvas myCanvas
property var start
property var end
Component.onCompleted: {
end = root
}
onXChanged: myCanvas.requestPaint()
onYChanged: myCanvas.requestPaint()
Rectangle {
id: rect
color: "blue"
anchors.fill: root
MouseArea {
id: mouseArea
anchors.fill: rect
Drag.active: true
drag.target: root
drag.axis: Drag.XAndYAxis
drag.minimumX: 0
drag.minimumY: 0
onReleased: mouseArea.Drag.drop()
}
}
}
但是在创建时设置拖动不起作用,它仍然需要鼠标释放和另一次单击/拖动 . (我也不能让下降工作,但一次只有一个问题...)
我会对正确的方法表达一些意见 .
1 回答
我会在
C++
中将其作为一个实体项目,"field" . 我的意思是在这个项目中绘制所有节点和"patches",实现QQuickItem
或QQuickPaintedItem
. 因此,您可以根据需要重新实现所有鼠标事件 . 您也可以使用Canvas
完成所有工作,例如: