QML中ListView实现鼠标点击拖动交换两个item的位置,实现如下效果:
首先,重写ListView的move属性,如下代码所示:
ListView {
id: layer_list
model: modelLayer
delegate: delegateLayer
interactive: false
move: Transition {
NumberAnimation { properties: "x,y"; duration: 100 }
}
}
接着,在Component捕获鼠标事件,如下所示:
Component {
id: delegateLayer
Rectangle {
id: wrapper
MouseArea {
id: mousearea
anchors.fill: parent
hoverEnabled: true
onMouseXChanged: {
var pore = layer_list.indexAt(mousearea.mouseX + wrapper.x, mousearea.mouseY + wrapper.y);
if (pore != -1 && pressed) {
if (index != pore) {
modelLayer.move(index, pore, 1);
}
}
}
}
}
}