Qt Quick 示例 - 拖放#

这是一个 QML 拖放示例的集合。

../_images/qml-draganddrop-example.png

拖放 是一系列小型的 QML 示例,与拖放功能相关。了解更多信息,请访问拖放页面。

运行示例#

要从 Qt Creator 运行示例,请打开欢迎模式并从示例中选择示例。了解更多信息,请访问构建和运行示例。

拼图#

拼图 将拖放功能添加到简单的矩形中,您可以将它们拖放到特定的网格中。

它有一个 DragTile 组件,它使用 MouseArea 在拖动时移动项目

Item {
    id: root

    required property string colorKey
    required property int modelData

    width: 64
    height: 64

    MouseArea {
        id: mouseArea

        width: 64
        height: 64
        anchors.centerIn: parent

        drag.target: tile

        onReleased: parent = tile.Drag.target !== null ? tile.Drag.target : root

        Rectangle {
            id: tile

            width: 64
            height: 64
            anchors {
                verticalCenter: parent.verticalCenter
                horizontalCenter: parent.horizontalCenter
            }

            color: root.colorKey

            Drag.keys: [ root.colorKey ]
            Drag.active: mouseArea.drag.active
            Drag.hotSpot.x: 32
            Drag.hotSpot.y: 32
            states: State {
                when: mouseArea.drag.active
                AnchorChanges {
                    target: tile
                    anchors {
                        verticalCenter: undefined
                        horizontalCenter: undefined
                    }
                }
            }
        }
    }
}

还有一个 DropTile 组件,拖动的拼图可以放在上面

DropArea {
    id: dragTarget

    property string colorKey

    width: 64
    height: 64
    keys: [ colorKey ]

    Rectangle {
        id: dropRectangle

        anchors.fill: parent
        color: dragTarget.containsDrag ? "grey" : dragTarget.colorKey
    }
}

DropArea 的键属性仅允许在它的 Drag.keys 属性中具有匹配键的项目被放置在其上。

GridView 示例#

**GridView 示例** 将拖放功能添加到 GridView 中,允许您在不更改底层 ListModel 的情况下可视地重新排列委托。它使用 DelegateModel 将委托项目移动到拖动到另一个项目的位置。

model: DelegateModel {
delegate: DropArea {
    id: delegateRoot
    required property color color

    width: 80
    height: 80

    onEntered: function(drag) {
        visualModel.items.move((drag.source as Icon).visualIndex, icon.visualIndex)
    }

    property int visualIndex: DelegateModel.itemsIndex

    Icon {
        id: icon
        dragParent: root
        visualIndex: delegateRoot.visualIndex
        color: delegateRoot.color
    }
}

示例项目 @ code.qt.io