子级topMargin的别名目标位置无效

时间:2018-01-04 09:32:21

标签: qml qt5 qtquick2

尝试在根组件中公开topMarginalias时,出现以下错误:

Invalid alias target location: topMargin

代码如下:

import QtQuick 2.6

Item {
  id: root

  property alias textTopMargin: description.anchors.topMargin

  Text {
    id: description
  }

我无法在文档中找到有关别名和锚点的任何信息,这是禁止的吗?

编辑: 似乎是由此引起的:https://bugreports.qt.io/browse/QTBUG-65011

1 个答案:

答案 0 :(得分:2)

我为什么不起作用的原因(我没有证据)

我们假设你有以下内容:

// SomeObject.qml

QtObject {
    property int someProperty: 5
}

// SomeItem.qml

Item {
    property SomeObject someObject: SomeObject {}
}

现在你有了第二个项目:

// SomeOtherItem.qml

Item {
    property alias someProperty: smeItm.someObject.someProperty
    SomeItem {
        id: smeItm
    }
}

现在你在某个地方设置了一个新的SomeObjectsmeItm.someObject,什么是别名?原来的SomeObject还是新的?如果你想要任意链,你需要确保引用保持有效并且不会改变。

来自文档:

  

与普通属性不同,别名只能引用在声明别名的类型范围内的对象或对象的属性。它不能包含任意JavaScript表达式,也不能引用在其类型范围之外声明的对象。

这不是很明显,但您可以将其理解为:别名表达式具有以下形式之一:

  • objectId
  • objectId.propertyName