Qml 属性与别名

amp*_*ier 5 qml

要获取父组件的属性值并将它们分配给子属性,我们可以直接使用父属性

//Component1.qml:

Item
{
    Component2
    {
        contentWidth:200
    }
}

//Component2.qml:

Item
{
    property int contentWidth:0
    Rectangle
    {
        width:parent.contentWidth
    }
}
Run Code Online (Sandbox Code Playgroud)

或创建别名

//Component1.qml:

Item
{
    Component2
    {
        contentWidth:200
    }
}

//Component2.qml:

Item
{
    property alias contentWidth:rect.width
    Rectangle
    {
        id:rect
    }
}
Run Code Online (Sandbox Code Playgroud)

什么时候最合适?

我的想法是,当父属性仅用于一个特定的子组件属性时,应使用别名(contentWidth仅用于rect.width

der*_*erM 11

您的两个示例之间存在非常显着的差异。
Aproperty alias something: id.property自动创建双向绑定,而在示例 1 中,您只有单向绑定。

含义:如果您更改contentWidth两个Rectangles的宽度值会发生变化 - 如果现在(假设)即使在组件中的某些内部Rectangle也会更改宽度,则此更改将仅反映在示例 2 中,而在示例 1 中,绑定将被打破。

我不知道实现细节,但优化它可能更容易,如果你特别告诉,它不仅绑定到它,而且实际上是相同的值。

一个简单的经验法则是:property alias ...:...如果它在逻辑上是别名,则使用它,因此属性本质上是相同的。如果您想将属性从子项导出到外部,甚至是整个子项,通常就是这种情况。

使用属性绑定,如果你想绑定它们的值,因为它们的值巧合地相同,或者特别是如果不是,但一个只依赖另一个(但不一定是相反的,因为默认情况下你只有一个单向绑定)

Areadonly property Item child1: idOfChildOne可能与 具有相同的效果property alias child1: idOfChildOne,但从语义上讲,第一个就像一个保存指针的存储(由于 readonly 标志,它只被禁止更改),但第二个对这个孩子的直接访问。所以通常你想使用第二个(如 QtDesigner 所做的那样)。