我正在用QML编写一个小型PoC。在我的代码中的几个地方,我需要绑定/查询全局鼠标位置(例如,在场景或游戏窗口中的鼠标位置)。即使在鼠标不在我定义的MouseAreas之外的情况下也是如此。
环顾四周,唯一的方法似乎是用另一个MouseArea覆盖整个屏幕,很可能是启用了悬停。然后,我还需要处理半手动传播(悬停)事件到底层mouseAreas。
我是不是漏掉了什么?这似乎是一个相当常见的情况--是否有一种更简单、更优雅的方法来实现这一目标?
编辑:最有问题的情况似乎是在拖出一个MouseArea时。下面是一个极简的例子(它使用Below组件和derM的答案中的鼠标事件间谍)。当我单击图像并拖动到MouseArea外部时,鼠标事件不再出现,因此除非下面有一个DropArea,否则不能更新位置。
MouseEventSpy是从这里中提取的,以响应其中的一个答案。它只被修改为将位置作为信号的参数。
import VPlay 2.0
import QtQuick 2.0
import MouseEventSpy 1.0
GameWindow {
id: gameWindow
activeScene: scene
screenWidth: 960
screenHeight: 640
Scene {
id: scene
anchors.fill: parent
Connections {
target: MouseEventSpy
onMouseEventDetected: {
console.log(x)
console.log(y)
}
}
Image {
id: tile
x: 118
y: 190
width: 200
height: 200
source: "../assets/vplay-logo.png"
anchors.centerIn: parent
Drag.active: mausA.drag.active
Drag.dragType: Drag.Automatic
MouseArea {
id: mausA
anchors.fill: parent
drag.target: parent
}
}
}
}发布于 2017-11-23 09:06:37
由于您只有几个地方需要查询全局鼠标位置,所以我建议您使用mapToGlobal或mapToItem方法。
https://stackoverflow.com/questions/47451218
复制相似问题