gpt4 book ai didi

Qml 属性与别名

转载 作者:行者123 更新时间:2023-12-01 18:27:07 25 4
gpt4 key购买 nike

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

//Component1.qml:

Item
{
Component2
{
contentWidth:200
}
}

//Component2.qml:

Item
{
property int contentWidth:0
Rectangle
{
width:parent.contentWidth
}
}

或创建别名
//Component1.qml:

Item
{
Component2
{
contentWidth:200
}
}

//Component2.qml:

Item
{
property alias contentWidth:rect.width
Rectangle
{
id:rect
}
}

什么是最合适的方式和时间?

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

最佳答案

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

含义:如果更改 contentWidth 的值两个的宽度Rectangle s 会改变 - 如果现在(假设)在组件 Rectangle 中有一些内部会改变宽度,这种变化只会反射(reflect)在示例 2 中,而在示例 1 中,绑定(bind)会被破坏。

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

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

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

一个 readonly property Item child1: idOfChildOne可能与 property alias child1: idOfChildOne 具有相同的效果,但从语义上讲,第一个类似于保存指针的存储(由于 readonly 标志,仅禁止更改),但第二个是直接访问该子项。所以通常你想使用第二个(正如 QtDesigner 所做的那样)。

关于Qml 属性与别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45655106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com