Вы должны сохранить отношения родитель-потомок, чтобы распространять события перемещения MouseArea
на другие MouseArea
, которые перекрываются и находятся ниже в порядке визуального размещения. *
Но как поступить наоборот, то есть, как заблокировать сигналы перемещения, если я не хочу делиться событиями перемещения, поэтому родительский MouseArea не containsMouse
, когда у дочернего элемента (при условии, что оба имеют hoverEnabled: true
)?
Edit:
Вот небольшой пример приложения для иллюстрации того, о чем я говорю.
По сути, я ищу какой-то элегантный (qml, только если возможно, но было бы желательно любое решение) способ для внешнего MouseArea
(ma1
), чтобы containsMouse
было равно false
, когда мышь находится над внутренней областью мыши.
import QtQuick 2.12
import QtQuick.Controls 2.5
ApplicationWindow{
width: 640
height: 480
visible: true
MouseArea {
id: ma1
anchors.fill: parent
hoverEnabled: true
MouseArea {
anchors.centerIn: parent
width: parent.width * Math.log(2)
height: parent.height * Math.log(2)
hoverEnabled: true
z: 1
// onPositionChanged: mouse.accepted = true;
// onMouseXChanged: mouse.accepted = true;
// onMouseYChanged: mouse.accepted = true;
// onEntered: { ma1.hoverEnabled = false; ma1.enabled = false; }
// onExited: ma1.hoverEnabled = true;
Component.onCompleted: bg.createObject(this, { "hovered": Qt.binding(function() { return containsMouse; }) } );
}
Component.onCompleted: bg.createObject(this, { "hovered": Qt.binding(function() { return containsMouse; }) } );
}
Component {
id: bg
Rectangle {
property bool hovered: false
anchors.fill: parent
color: hovered ? "green" : "red"
border.width: 1
Text {
anchors {
top: parent.top
horizontalCenter: parent.horizontalCenter
}
text: (!parent.hovered ? "un" : "") + "hovered"
color: "white"
}
}
}
}