gpt4 book ai didi

events - QML - 当我不接受鼠标按下事件时无法获得鼠标释放事件

转载 作者:行者123 更新时间:2023-12-02 03:35:16 25 4
gpt4 key购买 nike

我想将我的 onPressed 事件分派(dispatch)到我的 QML 树中的后续对象,(我已经指示 mouse.accepted = false 和 propagateComposedEvents: true )但我想让 onreleased 事件在顶级元素上工作..这里的代码:

Item {

width: 200
height: 200

Rectangle {
z: 1
anchors.fill: parent
MouseArea{
anchors.fill: parent
propagateComposedEvents: true
onPressed: {
console.log("R1 pressed")
mouse.accepted = false
}
onReleased: {
console.log("R1 released")
mouse.accepted = false
}
}
}

Rectangle {
z: 0
anchors.fill: parent
MouseArea{
anchors.fill: parent
propagateComposedEvents: true
onPressed: {
console.log("R2 pressed")
}
onReleased: {
console.log("R2 released")
}
}
}

}

我希望看到的:

qml: R1 按下qml: R2 按下qml: R1 发布qml: R2 发布

我得到的:

qml: R1 按下qml: R2 按下qml: R2 发布

我该如何解决?

在此先感谢您的帮助。

最佳答案

使用 propagateComposedEvents 将不起作用,因为它的行为仅为组合事件定义,这意味着 clickeddoubleClicked 之一长按。因此,当您在 R1 的 onPressed 处理程序中设置 mouse.accepted = false 时,这与 propagateComposedEvents 无关。

设置 mouse.accepted = false 而不是根据文档执行它应该执行的操作:

no further events will be sent to this MouseArea until the button is next pressed.

在我看来,人们应该只对最顶部的 MouseArea 上的鼠标输入使用react。只要 R1 和 R2 彼此完全重叠,您就可以使 R2 成为它根本不是的东西。如果 R1 小于 R2 并且您想在 R1 的处理程序中为 R2 做一些事情,只需将 R2 代码移动到一个函数并从两个 MouseAreas 的事件处理程序中调用它。或者只使用绑定(bind)到两个鼠标区域的 pressed 状态。

关于events - QML - 当我不接受鼠标按下事件时无法获得鼠标释放事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23911433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com