DropArea 不通知有关 onEntered、onExited、onDropped 的操作
DropArea doesn't notify about actions onEntered, onExited, onDropped
我已经 Rectangle
填充了 MouseArea
,在 onPressAndHold()
处理程序上显示第二个 Rectangle
并将 drag
操作转移到那个 Rectangle
。问题是,当我将第二个 Rectangle
移动到 DropArea
上时,它不会通知任何操作(onEntered
、onExited
、onDropped
)。我尝试以多种组合来执行此操作,但从未奏效。这是一个示例,我是否遗漏了什么?
import QtQuick 2.0
import QtQuick.Window 2.0
Window {
id: appDrawerRoot
visible: true
width: 360; height: 360
property bool isRectVisible: false
Rectangle{
id:rect
color: "blue"
x:50; y:50
width: 50; height: 50
MouseArea{
anchors.fill: parent
onPressed: {
cloneRect.x = rect.x
cloneRect.y = rect.y
}
onPressAndHold: {
isRectVisible = true
drag.target = cloneRect
}
onReleased: {
drag.target = undefined
isRectVisible = false
cloneRect.x = rect.x
cloneRect.y = rect.y +100
}
}
}
Item{
id: cloneRect
width: 50; height:50
visible: isRectVisible
MouseArea{
id: mouseArea
width:50; height:50
anchors.centerIn: parent
Rectangle{
id:tile
width: 50; height:50
color:"black"
opacity: 0.5
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
Drag.hotSpot.x: 25
Drag.hotSpot.y: 25
}
}
}
DropArea {
id:dropArea
x:153
y:158
z:-1
width:100; height: 100
Rectangle{
anchors.fill: parent
color: "Green"
}
onEntered: {
drag.source.opacity = 1
console.log("ENTERED")
}
onExited: {
drag.source.opacity = 0.5
console.log("EXITED")
}
onDropped:
{
console.log("DROPPED")
}
}
}
您的代码的主要问题是您没有设置拖动的 active
属性。像这样修改你的代码:
//..........................
Item{
id: cloneRect
width: 50; height:50
visible: isRectVisible
Drag.active: visible // Add this line of code
//.....................
更多信息请参考Qt实例。在 Qt Creator 的 "Welcome" 屏幕上点击 "Examples" 按钮并搜索 "drag and drop qml".
我已经 Rectangle
填充了 MouseArea
,在 onPressAndHold()
处理程序上显示第二个 Rectangle
并将 drag
操作转移到那个 Rectangle
。问题是,当我将第二个 Rectangle
移动到 DropArea
上时,它不会通知任何操作(onEntered
、onExited
、onDropped
)。我尝试以多种组合来执行此操作,但从未奏效。这是一个示例,我是否遗漏了什么?
import QtQuick 2.0
import QtQuick.Window 2.0
Window {
id: appDrawerRoot
visible: true
width: 360; height: 360
property bool isRectVisible: false
Rectangle{
id:rect
color: "blue"
x:50; y:50
width: 50; height: 50
MouseArea{
anchors.fill: parent
onPressed: {
cloneRect.x = rect.x
cloneRect.y = rect.y
}
onPressAndHold: {
isRectVisible = true
drag.target = cloneRect
}
onReleased: {
drag.target = undefined
isRectVisible = false
cloneRect.x = rect.x
cloneRect.y = rect.y +100
}
}
}
Item{
id: cloneRect
width: 50; height:50
visible: isRectVisible
MouseArea{
id: mouseArea
width:50; height:50
anchors.centerIn: parent
Rectangle{
id:tile
width: 50; height:50
color:"black"
opacity: 0.5
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
Drag.hotSpot.x: 25
Drag.hotSpot.y: 25
}
}
}
DropArea {
id:dropArea
x:153
y:158
z:-1
width:100; height: 100
Rectangle{
anchors.fill: parent
color: "Green"
}
onEntered: {
drag.source.opacity = 1
console.log("ENTERED")
}
onExited: {
drag.source.opacity = 0.5
console.log("EXITED")
}
onDropped:
{
console.log("DROPPED")
}
}
}
您的代码的主要问题是您没有设置拖动的 active
属性。像这样修改你的代码:
//..........................
Item{
id: cloneRect
width: 50; height:50
visible: isRectVisible
Drag.active: visible // Add this line of code
//.....................
更多信息请参考Qt实例。在 Qt Creator 的 "Welcome" 屏幕上点击 "Examples" 按钮并搜索 "drag and drop qml".