Qt 如何处理重叠区域中按下和释放的信号?
我想在两个重叠的鼠标区域中处理按下和释放的信号 我的情况简要说明如下: 我有两个鼠标区域M1和M2。M1包含在一个矩形中,该矩形用作按钮。它有一个固定的尺寸,例如100x100。M2占据了整个屏幕,而且绝对比M1大。我可以任意设置M1和M2的z属性。我需要处理这两个鼠标区域中按下和释放的信号 在QtQuick中是否可能,如果可能,如何实现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
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解决了我的问题。因此,如果有人提出这个答案,我肯定会接受它作为正确的答案!