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

  1. 顶层的hoverEnabledfalse(默认值),无论其enable属性是什么,则底层可以监听到onPositionChanged
  2. 顶层的hoverEnabledtrue,无论其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
        }
    }
}
posted @   warindy  阅读(435)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示