首页 > 其他分享 >QML上层MouseArea对下层的MouseArea接收positionChange信号的遮挡

QML上层MouseArea对下层的MouseArea接收positionChange信号的遮挡

时间:2022-10-13 15:34:00浏览次数:40  
标签:positionChange anchors parent MouseArea QML hoverEnabled true fill

我们知道,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
        }
    }
}

标签:positionChange,anchors,parent,MouseArea,QML,hoverEnabled,true,fill
From: https://www.cnblogs.com/warindy/p/16788297.html

相关文章