父子关系中Window和Item之间的QML差异

时间:2015-12-30 09:55:21

标签: qt qml qtquick2

我想知道为什么Item这有效:

Item {
    id: root
    width: 640
    height: 480
    MouseArea {
        anchors.fill: (root or parent. It doesn't matter)
        onClicked: console.log("clicked")
    }
}

但对Window而言,它并没有。只有父级锚定才能起作用,但是对于按ID锚定它会失败。

1 个答案:

答案 0 :(得分:3)

根据documentationanchors.fill要求参数要么是或要识别Item派生的对象。

here开始,您可以关注Window的继承链,看看它实际上不是Item
此外,从here您可以看到:

  

如果您将一个项目分配给数据列表,它将成为Window的contentItem 的子项,因此它将显示在窗口内。

我们拥有contentItem的地方:

  

此附加属性包含场景的隐藏根项目,如果项目不在窗口中,则为null。

正因为如此,你所观察到的是有道理的:

  • id的{​​{1}}无法识别Window →按Item锚定会导致错误
  • id实际上是隐藏的parent - 派生ItemcontentItem的每个孩子都自动成为父级的代表,通过Window进行锚定正确地工作