在QML TreeView

时间:2017-09-10 13:07:58

标签: qt drag-and-drop treeview qml qitemdelegate

在QML中,我有一个带有(正常工作)多选的TreeView:

TreeView {
    id: treeview
    anchors.fill: parent
    model: myTestModel

    selectionMode: SelectionMode.ExtendedSelection
    selection: ItemSelectionModel {
        model: treeview.model
    }

    TableViewColumn {
        role: "name_role"
        title: "Name"
        width: 160
    }
    TableViewColumn {
        role: "type_role"
        title: "Type"
        width: 75
    }
}

我想实施阻力& drop以便能够将项目从树视图“拉”到DropArea中。

但是当我使用我发现的方法多次,即定义一个包含MouseArea的itemDelegate时,选择不再起作用。

TreeView {
    id: treeview
    anchors.fill: parent
    model: myTestModel

    // broken due to MouseArea in itemDelegate !
    selectionMode: SelectionMode.ExtendedSelection
    selection: ItemSelectionModel {
        model: treeview.model
    }

    TableViewColumn {
        role: "name_role"
        title: "Name"
        width: 160
    }
    TableViewColumn {
        role: "type_role"
        title: "Type"
        width: 75
    }

    itemDelegate: Item {
        Rectangle {
            id: rect
            anchors.fill: parent
            color: styleData.selected ? "blue" : "transparent"
            Text {
                anchors.verticalCenter: parent.verticalCenter
                color: styleData.selected ? "white" : "black"
                text: styleData.value
            }
            MouseArea {
                anchors.fill: parent
                drag.target: symbolAvatar
                onPressed: {
                    var tmp = mapToItem(container, mouse.x, mouse.y);
                    symbolAvatar.x = tmp.x;
                    symbolAvatar.y = tmp.y;
                    symbolAvatar.dragging = true;
                    symbolAvatar.text = styleData.value;
                }
            }
        }
    }
}

其中symbolAvatar是一个在拖动开始时变得可见的项目。

如何在不破坏选择的情况下在QML TreeView中实现拖放的任何想法?

编辑:在TreeView中使用onPressAndHold事件处理程序将是一个解决方案,如果我可以访问那里的鼠标位置,但它似乎不存在: - (

0 个答案:

没有答案