如何处理重叠Mousareas中的压缩和释放信号?

时间:2016-02-15 08:42:24

标签: qt qml qt-quick qt5.5

我想在两个重叠的Mouseareas中处理按下和释放的信号。

我的案例简要说明如下:

我有两个鼠标区域M1和M2。 M1包含在一个矩形中,用作按钮。它具有固定的大小,例如100x100。 M2填满整个屏幕,绝对比M1大。我可以任意设置M1和M2的z属性。我需要在这两个Mouseareas中处理按下和释放的信号。

QtQuick有可能,如果可以,怎么样?

import QtQuick 2.5
Item {
    visible: true
    width:1280
    height:720

    Rectangle {
        color: "blue"
        width: 100; height: 100
        z:1
        MouseArea {
            id:m1
            anchors.fill: parent
            onPressed : {
                mouse.accepted = false
                console.log("pressed m1")
            }
            onReleased: {
                console.log("released m1")
            }
        }
    }

    MouseArea {
        id: m2
        anchors.fill: parent
        onPressed : {
            console.log("pressed m2")
        }
        onReleased: {
            console.log("released m2")
        }
    }
}

我希望在按下并释放m1时按下并释放两个Mouseareas。

(Qt版本5.5)

2 个答案:

答案 0 :(得分:1)

在第一个回答中的评论之后。关于这样的事情:

import QtQuick 2.5
import QtQuick.Window 2.2

Window {
    visible: true
    width:1280
    height:720

    Rectangle {
        color: "blue"
        width: 100; height: 100
        z:1
        MouseArea {
            id:m1
            anchors.fill: parent
            propagateComposedEvents: true
            onPressed : {
                mouse.accepted = false
                console.log("pressed m1")
            }
            onReleased: {
                console.log("released m1")

            }
        }
    }

    MouseArea {
        id: m2
        anchors.fill: parent
        onPressed : {
            console.log("pressed m2")
        }
        onReleased: {
            console.log("released m2")
            m1.released(mouse);
        }
    }
}

这打印出你想要的东西。

答案 1 :(得分:0)

首先,MouseArea不能以大写字母开头,因此M1不能是M2import QtQuick 2.3 Rectangle { id: root width: 400 height: 300 Rectangle { id: m1Container width: 100 height: 100 color: "blue" z: 1 MouseArea { id: m1 anchors.fill: parent hoverEnabled: true onPressed: { mouse.accepted = false console.log("m1 pressed") } onReleased: { console.log("m1 released") } } } MouseArea { id: m2 anchors.fill: parent onPressed: { console.log("m2 pressed") } onReleased: { console.log("m2 released") if(m1.containsMouse) { m1.released(mouse) } } } } 。相反,它们必须是m1和m2。

m1.released(mouse)

编辑:我已经从sk2212的答案中借用了m1的想法,并在鼠标位于openssl_verify_mode: :none之外时调整了一点来处理这个案例压制和释放。