在QtQuick 2.0中重叠鼠标区域

时间:2014-10-06 06:34:11

标签: qt qml

我有QML 2.0中的项目列表,我只想在鼠标位于黑色鼠标区域内时显示项目的上下文菜单(图中的红色框)。上下文菜单包含几个按钮,每个按钮都有自己的museArea。在QtQuick 1.0中它按预期工作,但在2.0中没有。当我在小红框(上下文菜单的项目)之间移动光标时,调用黑色MouseArea :: onExited(并且不显示上下文菜单)。它看起来像小红色鼠标区覆盖了较大的黑色鼠标区。如果我设置:

z: 10

在黑色mouseArea中,当光标位于小红框上方时,不会调用onExited,但我无法使用小鼠标悬停效果。当光标位于红色框上方时,我应该怎么做才能访问小红框的鼠标区并同时不调用黑色mouseArea :: onExited?

QtQuick 2.0 MouseAreas

2 个答案:

答案 0 :(得分:2)

  

如果MouseArea与其他MouseArea项的区域重叠,   您可以选择宣传clickeddoubleClicked和   通过设置将pressAndHold个事件发送到这些其他项目   p ropagateComposedEventstrue并拒绝应该发生的事件   传播。请参阅propagateComposedEvents文档   的信息。

Source

答案 1 :(得分:2)

您可以启用悬停并检查 containsMouse 属性,而不是依赖mouseArea onExited onEntered 事件。这是一个工作示例(QtQuick 2.0):

Column
{
    spacing: 10
    Repeater
    {
        model:4
        Rectangle
        {
            height: 100
            width: parent.width
            border.color: "black"

            MouseArea
            {
                id: mouseArea
                anchors.fill: parent
                hoverEnabled: true
            }

            Rectangle
            {
                visible: mouseArea.containsMouse
                anchors.right: parent.right
                anchors.top: parent.top
                anchors.bottom: parent.bottom
                anchors.margins: 20
                width: 200
                border.color: "red"

                Rectangle
                {
                    anchors.centerIn: parent
                    color: "purple"
                    width: 20
                    height: 20
                    MouseArea
                    {
                        anchors.fill: parent
                        onClicked: print("clicked")
                    }
                }
            }



        }
    }
}