贊同暗示,映射座標的首選方法是使用mapToItem
,它可用於任何項目。它將當前項目座標系統(如果未另行指定)的座標(和大小)轉換爲另一個項目座標系統。和mapFromItem
同行
從Qt 5.7你也有mapToGlobal
,這將給你在系統/屏幕參考座標。
MouseArea {
// ...
onPositionChanged: {
var positionInRoot = mapToItem(root, mouse.x, mouse.y)
var positionInWindow = mapToItem(window.contentItem, mouse.x, mouse.y)
var globalPosition = mapToGlobal(mouse.x, mouse.y)
console.log("For root: " + positionInRoot)
console.log("For window: " + positionInWindow)
console.log("For system: " + globalPosition)
}
}
將輸出如下,給你MouseArea
接近root
,從Window
左上角遠一點,窗口本身是1000像素+從屏幕(S)
的最左邊
對於根:QPointF(10,0)
對於窗口:QPointF(150,100)
對於系統:QPointF(1230,120)
需要注意的是,當你想轉換爲Window
(QML型)座標系統,你需要使用contentItem
方法,如mapTo /從僅適用於Item
秒。
這是一個簡單的解決方案,當你只有1級時,但是mapToItem作爲更靈活和更容易維護的首選,因爲解釋是indalive和我的以下答案https://stackoverflow.com/a/44779025/4223664 –