Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何处理重叠区域中按下和释放的信号?_Qt_Qml_Qt Quick_Qt5.5 - Fatal编程技术网

Qt 如何处理重叠区域中按下和释放的信号?

Qt 如何处理重叠区域中按下和释放的信号?,qt,qml,qt-quick,qt5.5,Qt,Qml,Qt Quick,Qt5.5,我想在两个重叠的鼠标区域中处理按下和释放的信号 我的情况简要说明如下: 我有两个鼠标区域M1和M2。M1包含在一个矩形中,该矩形用作按钮。它有一个固定的尺寸,例如100x100。M2占据了整个屏幕,而且绝对比M1大。我可以任意设置M1和M2的z属性。我需要处理这两个鼠标区域中按下和释放的信号 在QtQuick中是否可能,如果可能,如何实现 import QtQuick 2.5 Item { visible: true width:1280 height:720

我想在两个重叠的鼠标区域中处理按下和释放的信号

我的情况简要说明如下:

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

在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时,我想按下并释放两个鼠标区域


(Qt版本5.5)

首先,
id
s不能以大写字母开头,因此您的
MouseArea
s不能是
M1
M2
。相反,它们必须是m1和m2

import 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)
            }
        }
    }
}

编辑:我从sk2212的答案中借用了
m1.released(mouse)
的概念,并对鼠标位于
m1
之外并被按下并释放时的情况进行了一些调整。

在第一个答案中的注释之后。像这样的东西是什么

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);
        }
    }
}

这会打印出您想要的内容。

为什么不显示您尝试过的任何内容?听起来很像这个问题:。这是关于触摸区域的,但同样的解决方案也应该适用。对eventfilters的引用非常有用,它朝着正确的方向发展,非常适合我的实际用例!因为我想保持它的简单,所以我没有进一步详细说明。显然我需要。试试这段代码,告诉我如果你被按下并释放了这些鼠标的输出:)你试过我的吗?如果没有,请先尝试。我希望同时处理按下和释放的事件。所以你的代码所做的是,如果你点击m1,你只会得到m1的按下和释放。我想得到的是m1被按下,m1被释放,m2被按下,m2被释放当m1被按下/释放时,你想得到m1和m2的按下和释放吗?是的,确切地说,当m1被按下/释放时,你应该得到m1被按下,m2被按下,m1被释放,m2被释放。订单对我们来说并不重要me@OnurA但当鼠标在m1之外按下并释放时,它会显示
按下的m2,释放的m2,释放的m1
。它不应该只是按下m2,释放m2吗?是的,你是对的。实际上,这个方法或多或少地回答了我的问题,但我不会在我的应用程序中使用它。因此,我需要一个更大的鼠标区域,用于整个屏幕的用户输入。但是,我通过移除m2并在QQuickView项上使用eventfilter解决了我的问题。因此,如果有人提出这个答案,我肯定会接受它作为正确的答案!