Зачем нужно Drag.active: dragArea.drag.active и что это вообще?
Есть код
Component {
id: example_1
Rectangle {
width: 250
height: 250
Rectangle {
id: dragItem
x: 10; y: 10
width: 50; height: 50
color: "red"
Drag.active: dragArea.drag.active
property point beginDrag // для фиксации начальной позиции
property bool caught: false // элемент в DropArea
z: dragArea.drag.active || dragArea.pressed ? 2 : 1
MouseArea {
id: dragArea
anchors.fill: parent
drag.target: parent
// по нажатию устанавливаем начальную позицию прямоугольника
onPressed: dragItem.beginDrag = Qt.point(dragItem.x, dragItem.y)
onReleased: {
// возвращаемся на начальную позицию
if(!dragItem.caught){
dragItem.x = dragItem.beginDrag.x
dragItem.y = dragItem.beginDrag.y
}
}
}
}
Rectangle {
// обработчик вхождения элемента в DropArea
function onEntered(drag){ drag.source.caught = true }
anchors.right: parent.right
width: parent.width/2 ; height:parent.height
color: "silver"
DropArea {
id: dropArea
anchors.fill: parent
// обработчик ухода элемента из DropArea
onExited: drag.source.caught = false
}
Component.onCompleted: {
// связь сигнала entered с onEntered
dropArea.entered.connect(onEntered)
}
}
}
}
Loader { sourceComponent: example_1 }
И в нем вроде бы все понятно за исключением строчки Drag.active: dragArea.drag.active
. Без нее все работает как то не так. Путем дебага я пришел к тому что без этой сточки не вызываются события onEntered
и onExited
хотя привязка происходит. Вопрос в том как это работает. Почему где то мы пишем drag
, а где то Drag
? Что за active
такой? И зачем нам передавать его из dragArea
? И откуда он берется в dragArea
?
Я нашел какие то объяснения в инете, но они написаны таким кхм нехорошим языком что ничего не понятно.