我遇到了一些奇怪的行为。
某项的mapToGlobal()或mapFromGlobal()方法在坐标相对位置上似乎不一致。
对于某些项目,位置相对于应用程序窗口。
对于其他项目,位置相对于我的屏幕。如果我在屏幕上移动应用程序窗口,它们将有所不同。
下面是我的代码的简化示例(我实际上有多个组件和信号来决定应加载哪个组件)。
MyType.qml:
Item{
Button{
onClicked: {
loader.sourceComponent = component; // Different positions
}
}
Loader{
id: loader
anchors.fill: parent
}
Component{
id: component
Rectangle{
Component.onCompleted: {
var point = mapFromGlobal(0, 0);
console.log("temp 2: ", point.x, point.y);
}
}
}
Component.onCompleted: {
//loader.sourceComponent = component; // Same positions
var point = mapFromGlobal(0, 0);
console.log("temp 1: ", point.x, point.y);
}
}
main.qml
ApplicationWindow {
id: appWindow
visible: true
width: 600
height: 400
MyType{
anchors.fill: parent
}
}
结果输出为
温度1:0 0
温度2:-199 -85
有人知道为什么位置有时相对于屏幕,有时相对于应用程序窗口吗?还是知道这种奇怪行为的另一种解释?
编辑:
如果我直接在Component.onCompleted中加载组件(示例代码中注释过),则两个输出均为00。不幸的是,除了与Loader元素有关,这没有使我更接近一个解释。