QMLで小さなPoCをプログラミングしています。私のコードのいくつかの場所では、グローバルなマウス位置(例えば、シーンやゲームウィンドウ内のマウスの位置)にバインド/照会する必要があります。マウスが私が今までに定義したMouseAreasの外にある場合でも。QMLでのグローバルなマウス位置の照会
周囲を見回すと、画面全体が別のMouseAreaで覆われている可能性があります。ほとんどの場合、ホバリングが有効になっています。次に、下にあるマウス領域に準手動伝播(ホバー)イベントを処理する必要があります。
私はここに何か不足していますか?これはかなり一般的なケースのようです - それを達成するためのよりシンプルでエレガントな方法がありますか?
EDIT: 最も問題のあるケースは、MouseAreaの外にドラッグしているようです。以下は最小限の例です(V-PlayコンポーネントとderMの答えからのマウスイベントスパイを使用しています)。画像をクリックしてMouseAreaの外にドラッグすると、マウスイベントがもう発生しなくなり、以下のDropAreaがない限り、位置を更新できなくなります。
MouseEventSpy
は、答えの1つに応じて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'の修正コードを提供できますか? '... && event->自発的な()){ QMouseEvent *私を:;' 、その後 '無効mouseEventDetected(int型のx、int型のY): – derM
それはほとんど変更されていないですが、私は、信号のプロトタイプを変更しました=(QMouseEvent *)イベント。 emit mouseEventDetected(me-> globalX()、me-> globalY()); } ' – evilkonrex
これは' Drag.dragType'に関連しているようです。コメントアウトされていれば、動作するようです。解決策が見つかるかどうかがわかります。 – derM