希望这是一个有问题的问题。在我的应用程序中,我定义了DragArea
,我用它来开始拖动各种包含DropArea
的各种矩形的顶部。我的代码除了之外,一切都运行正常,我想改变一下美化效果。
在QML中,当你从DragArea
开始拖动并最终掉落时,动画效果就是你将动画拖动(同时淡出)回到你开始拖动。即使您成功捕获掉落的DropArea
,也会发生这种情况。
我想要做的是让下拉效果向接收到放置的DropArea
生效 - 这样看起来我将东西拖放到Rectangle中。有没有办法做到这一点?
我猜测这在某种程度上涉及这些区域的.source和.target属性,但到目前为止对于放置动画的位置没有任何影响。
答案 0 :(得分:2)
默认情况下,QML不会为您提供拖放的整容行为。拖动目标将从拖动开始位置开始,无论是否接受拖动,拖动目标都会在拖放的任何位置结束。
因此,我假设您描述的行为是在您的用户代码中实现的,您尚未透露。无论如何,你想要做的事情很简单,它涉及跟踪拖动起始位置和结束位置,因此你可以使用两个坐标来动画位置。
在下面的示例中,可以拖动红色矩形,如果拖放到拖放区域之外,它将从其当前位置动画到其初始位置,而如果放入黄色矩形,则会从其初始位置动画到其放置位置。位置。
Window {
width: 600
height: 600
visible: true
Rectangle {
width: 200
height: 200
color: "yellow"
DropArea {
anchors.fill: parent
onEntered: drag.source.accepted = true
onExited: drag.source.accepted = false
}
}
Rectangle {
id: rect
width: 50
height: 50
color: "red"
x: parent.width * 0.5
y: parent.height * 0.5
Drag.active: mouseArea.drag.active
property point begin
property point end
property bool accepted : false
MouseArea {
id: mouseArea
anchors.fill: parent
drag.target: parent
onPressed: rect.begin = Qt.point(rect.x, rect.y)
onReleased: {
rect.end = Qt.point(rect.x, rect.y)
aX.from = rect.accepted ? rect.begin.x : rect.end.x
aX.to = rect.accepted ? rect.end.x : rect.begin.x
aY.from = rect.accepted ? rect.begin.y : rect.end.y
aY.to = rect.accepted ? rect.end.y : rect.begin.y
anim.start()
}
ParallelAnimation {
id: anim
NumberAnimation { id: aX; target: rect; property: "x"; duration: 200 }
NumberAnimation { id: aY; target: rect; property: "y"; duration: 200 }
}
}
}
}