Qt Quick 示例 - 拖放#
这是一个 QML 拖放示例的集合。
拖放 是一系列小型的 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 } }