这是我的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
。我搜索该文档以找出哪个属性可以阻止这种行为,但未找到任何内容。那么如何让
mouseArea1
和mouseArea2
同时生效? 最佳答案
对于“组合”鼠标事件-clicked
,doubleClicked
和pressAndHold
-您可以使用 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/