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
}
}
}
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现