我想创建一个具有两个属性的自定义QML组件,one并且two在未初始化时应具有默认值.特别是,如果two应该得到一个初始值one.以下代码
Rectangle {
property int one: 1
property int two: 2 * one
}
Run Code Online (Sandbox Code Playgroud)
但是会创建一个属性绑定:每当one更改时,two都会更新为新值2 * one.如何在不创建绑定的情况下初始化two为值2 * one?
小智 13
显式告知您不需要绑定的一种方法是在表达式块中调用赋值:
Rectangle {
property int one: 1
property int two: {two = 2 * one}
}
Run Code Online (Sandbox Code Playgroud)
与 onCompleted 中破坏绑定的方法不同,表达式块避免了绑定对象的创建和销毁,而且看起来更干净。
在组件完成时显式打破绑定:
Rectangle {
property int one: 1
property int two: 2 * one
Component.onCompleted: two = two
}
Run Code Online (Sandbox Code Playgroud)
该two = two分配断约束力,two不再更新one的变化。
Blu*_*gma -3
事实上,你不应该这样做。绑定是 QML 的基本行为,如果您试图避免它,那是因为您没有考虑好方法。
例如,如果属性二初始值是用属性一初始值计算的,而不是属性一值计算的,
那么这意味着您想要绑定初始值而不是值,您应该创建一个只读属性,该属性的值将是属性一个初始值:
readonly property int initialOne : 1;
property int one : initialOne;
property int two : 2 * initialOne;
Run Code Online (Sandbox Code Playgroud)
它可能看起来有点沉重,但如果你仔细想想,初始值就是你想要使用的,所以,属性的概念才是你真正想要的