QML - MouseArea - распространение наPositionChanged
Можно ли распространять событие MouseArea
positionChanged на базовое?
Я попытался установить mouse.accepted
в false
для любого существующего обработчика сигнала самого верхнего MouseArea
, а также для установки propagateComposedEvents
на true
. Ни один из них не работал (хотя я не удивлен тем, что propagateComposedEvents
не работает, так как в документации говорится, что он передает только такие события, как clicked
, doubleClicked
и pressAndHold
).
Ответы
Ответ 1
В зависимости от вашей структуры вы всегда можете вручную распространять событие, указав вызов обработчика onPositionChanged basicMouseArea.positionChanged(мышь). Это должно вручную излучать сигнал в базовой MouseArea. Моя единственная проблема заключается в том, что вы не сможете передать объект MouseEvent таким образом (никогда не пробовали ни с чем, кроме строки). Тем не менее, вы всегда можете выполнить это ручное испускание на С++, которое, безусловно, не пострадает от каких-либо проблем с преобразованием типов.
Ответ 2
Если вам не нужно обрабатывать события изменения позиции с несколькими областями мыши одновременно, вы можете попробовать восстановить свою верхнюю область мыши:
import QtQuick 2.2
import QtQuick.Layouts 1.1
Rectangle {
id: __root
color: "lightgreen"
width: 360
height: 360
Rectangle {
id: rect2
width: 100; height: 100
color: "cyan"
MouseArea {
parent: __root // set 'logical' parent
anchors.fill: rect2 // set 'visual' ancestor
hoverEnabled: true
onPositionChanged: {
console.log('mouse area 2 onPositionChanged');
}
}
}
MouseArea {
anchors.fill: parent
hoverEnabled: true
onPositionChanged: {
console.log('mouse area 1 onPositionChanged');
}
}
}
Существует неразрешенный bugreport.