相对于屏幕或应用程序窗口的QML mapToGlobal()

时间:2018-10-31 13:14:18

标签: qt qml

我遇到了一些奇怪的行为。

某项的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元素有关,这没有使我更接近一个解释。

0 个答案:

没有答案