gpt4 book ai didi

drag-and-drop - QML拖放(自由定位)

转载 作者:行者123 更新时间:2023-12-04 09:35:02 24 4
gpt4 key购买 nike

那里有很多 QML 拖放示例,但它们都没有真正帮助我,因为在所有示例中,您都可以将一个元素拖到另一个元素中,在那里它居中,并且您在上面拖动的所有其他元素都覆盖在它上面。

有没有办法在一侧有一些元素而在另一侧有一个大 Rectangle你可以把它们拖进去,把它们放在里面的任何地方,然后它们保持在它们的确切放置位置?

例如,如果我得到一个 Rectanglewidth: 200; height: 200然后我拖入一个元素,这样的元素应该留在我放下它的位置,例如x: 25y: 65 .那应该是元素的位置。

你有什么建议吗?

最佳答案

设置很简单drag.target制作 Item可拖动,正如@qCring 已经注意到的那样。放下拖动的 Item根本不会改变它的位置。无论如何,也许这个小例子可以帮助你:

import QtQuick 2.4
import QtQuick.Window 2.2

Window {
id: win
width: 800
height: 600
title: "Drag & drop example"
visible: true

Repeater {
model: 10
Rectangle {
id: rect
width: 50
height: 50
z: mouseArea.drag.active || mouseArea.pressed ? 2 : 1
color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1)
x: Math.random() * (win.width / 2 - 100)
y: Math.random() * (win.height - 100)
property point beginDrag
property bool caught: false
border { width:2; color: "white" }
radius: 5
Drag.active: mouseArea.drag.active

Text {
anchors.centerIn: parent
text: index
color: "white"
}
MouseArea {
id: mouseArea
anchors.fill: parent
drag.target: parent
onPressed: {
rect.beginDrag = Qt.point(rect.x, rect.y);
}
onReleased: {
if(!rect.caught) {
backAnimX.from = rect.x;
backAnimX.to = beginDrag.x;
backAnimY.from = rect.y;
backAnimY.to = beginDrag.y;
backAnim.start()
}
}

}
ParallelAnimation {
id: backAnim
SpringAnimation { id: backAnimX; target: rect; property: "x"; duration: 500; spring: 2; damping: 0.2 }
SpringAnimation { id: backAnimY; target: rect; property: "y"; duration: 500; spring: 2; damping: 0.2 }
}
}
}

Rectangle {
anchors {
top: parent.top
right: parent.right
bottom: parent.bottom
}
width: parent.width / 2
color: "gold"
DropArea {
anchors.fill: parent
onEntered: drag.source.caught = true;
onExited: drag.source.caught = false;
}
}
}
Item可以拖入黄色框,但不能拖回。只是为了好玩。

关于drag-and-drop - QML拖放(自由定位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30981404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com