我们知道,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
}
}
}
标签:positionChange,anchors,parent,MouseArea,QML,hoverEnabled,true,fill
From: https://www.cnblogs.com/warindy/p/16788297.html