这是我的QML代码:

Rectangle
{
    .....
    Rectangle
    {
        ....height and width is smaller than parent
        MouseArea
        {
            id: mouseArea2
            anchors.fill: parent
            hoverEnabled: true

            onEntered:
            {
                console.log("enter 2")
            }
        }
    }


    MouseArea
    {
        id: mouseArea1
        anchors.fill: parent
        hoverEnabled: true

        onEntered:
        {
            console.log("enter 1")
        }
    }
}

mouseArea1生效。如果我删除mouseArea1,则mouseArea2生效。因此,我认为鼠标事件必须由mouseArea1处理,并且不能将其传递给mouseArea2

我搜索该文档以找出哪个属性可以阻止这种行为,但未找到任何内容。那么如何让mouseArea1mouseArea2同时生效?

最佳答案

对于“组合”鼠标事件-clickeddoubleClickedpressAndHold-您可以使用 propagateComposedEvents 属性来实现。但这在这里不起作用,因为悬停事件不是组合事件。

因此,您需要做的是更改MouseArea的求值顺序。

一个简单的技巧是在QML源自身中交换两个MouseArea的顺序。通过将较小的一个放在较大的一个之后,较小的一个优先:

Rectangle{
    //.....
    MouseArea{
        id: mouseArea1
        anchors.fill: parent
        hoverEnabled: true

        onEntered:{
            console.log("enter 1")
        }
    }

    Rectangle{
         //....height and width is smaller than parent
        MouseArea{
            id: mouseArea2
            anchors.fill: parent
            hoverEnabled: true

            onEntered:{
                console.log("enter 2")
            }
        }
    }
}

实现相同目的的第二种方法是在最上面的z上添加一个MouseArea索引,该索引大于下面的索引。默认情况下,每个元素的z索引都为0,因此只需将z: 1添加到较小的MouseArea中就可以了:
Rectangle{
    //.....
    Rectangle{
        //....height and width is smaller than parent
        MouseArea{
            z: 1              // <-----------------
            id: mouseArea2
            anchors.fill: parent
            hoverEnabled: true

            onEntered:{
                console.log("enter 2")
            }
        }
    }

    MouseArea{
        id: mouseArea1
        anchors.fill: parent
        hoverEnabled: true

        onEntered:{
            console.log("enter 1")
        }
    }
}

关于qt - 如何使双重MouseArea生效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31666001/

10-12 13:07