QML로 작은 PoC를 프로그래밍하고 있습니다. 두 곳에서 내 코드에서 전역 마우스 위치 (예 : 장면 또는 게임 창에서 마우스 위치)에 바인드하거나 쿼리해야합니다. 마우스가 지금까지 정의한 MouseAreas 외부에있는 경우에도 마찬가지입니다.QML에서 전체 마우스 위치 쿼리
주위를 둘러 보니 전체 화면이 다른 MouseArea로 덮여있는 것처럼 보입니다. 마우스 오버가 가능할 가능성이 가장 높습니다. 그런 다음 기본 마우스 영역에 반 수동 전파 (호버) 이벤트도 처리해야합니다.
내가 여기에 뭔가를 놓친가요? 이것은 꽤 일반적인 경우처럼 보입니다 - 그것을 구현하는 더 단순하고 우아한 방법이 있습니까?
EDIT : 가장 문제가있는 경우는 MouseArea 외부로 끌고있는 것 같습니다. 아래는 V-Play 구성 요소와 derM의 마우스 이벤트 스파이를 사용하는 최소한의 예입니다. 이미지를 클릭하고 MouseArea 외부로 드래그하면 마우스 이벤트가 더 이상 나타나지 않으므로 아래 위치에 DropArea가 없으면 위치를 업데이트 할 수 없습니다.
MouseEventSpy
은 답 중 하나에 대한 응답으로 here에서 가져온 것입니다. 신호에 대한 매개 변수로 위치를 포함하기 위해서만 수정됩니다.
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
}
}
}
}
또한 'MouseEventSpy'의 수정 된 코드를 제공 할 수 있습니까? '... && 이벤트 -> 자연()) { QMouseEvent * 나 :;' 다음 '무효 mouseEventDetected (INT X, INT의 Y) : – derM
그것은 거의 수정되지 않은, 난에 신호 프로토 타입을 변경했습니다 = (QMouseEvent *) 이벤트; emit mouseEventDetected (me-> globalX(), me-> globalY()); }' – evilkonrex
'Drag.dragType'과 관련이있는 것 같습니다. 주석 처리 된 경우 작동하는 것 같습니다. 내가 해결책을 찾을 수 있는지 알게 될 것이다. – derM