QML上层MouseArea对下层的MouseArea接收positionChange信号的遮挡
我们知道,QML中更上层的MouseArea会阻挡下层的MouseArea接收鼠标信号,我们可以通过设置鼠标穿透来规避这种遮挡。
click事件的遮挡
如果将上层的MouseArea的enable属性设置为false,则不再阻挡鼠标的click事件。
Rectangle {
anchors.fill: parent
MouseArea {
anchors.fill: parent
onClicked: console.log("点击了底层")
}
Rectangle {
anchors.fill: parent
MouseArea {
anchors.fill: parent
enabled: false
onClicked: console.log("点击了顶层")
}
}
}
点击界面,输出为
qml: 点击了底层
positionChange事件的遮挡
将底层的MouseArea的hoverEnabled设置为true。
- 顶层的
hoverEnabled为false(默认值),无论其enable属性是什么,则底层可以监听到onPositionChanged。 - 顶层的
hoverEnabled为true,无论其enable属性是什么,底层都无法监听到onPositionChanged。
结论:如果需要底层监听onPositionChanged,需要将顶层的hoverEnabled关闭,而不仅仅是enable。
附测试代码:
Rectangle {
anchors.fill: parent
MouseArea {
anchors.fill: parent
hoverEnabled: true
enabled: true
onPositionChanged: console.log("bottom: onPositionChanged")
}
Rectangle {
anchors.fill: parent
MouseArea {
anchors.fill: parent
enabled: false
hoverEnabled: true
}
}
}

浙公网安备 33010602011771号