我有一个简单的QML应用程序,其中有一个Board(它只是一个名为' parentRect'的矩形)和一个较小的子矩形(名为' childRect')。
我希望每当 parentRect 的不透明度从 0 变为 1.0 , childRect 的不透明度也会改变其最终值的相同数量,但我希望 childRect 使用OpacityAnimator执行不透明度变化的动画。
这里有一个问题:
我试图这样做,以便如果不透明度从 0 变为 1 ,则OpacityAnimator的持续时间会很长,并且如果不透明度从 1.0 变为 0 ,则持续时间将非常短。
到目前为止,这是我尝试的内容:
Rectangle {
id: parentRect
Rectangle {
id: childRect
opacity: parentRect.opacity
visible: true
property int index: 10
Behavior on opacity {
OpacityAnimator {
duration: Qt.binding(function () {
if (parentRect.opacity === 0) {
return (50 * (index + 2))
} else {
return (2 * (index + 2))
}
})
}
}
}
执行代码后,我收到以下错误:
qrc:/main.qml:138:47:在绑定中无效使用Qt.binding() 声明。
答案 0 :(得分:2)
在进行命令式绑定时只使用Qt.binding()
,即执行someProp = Qt.binding(someFoo)
时,与常规赋值不同,它会将属性值绑定到表达式。
在您的情况下,您需要使用常规声明性绑定语法。如果它对于单行而言过于复杂,则可以将其写为函数,除了“标题”部分。
someProp: {
if (cond) {
return val1
} else {
return val2
}
}
如果你愿意的话。因为在您的情况下,您可以简单地使用三元条件运算符:
duration: parentRect.opacity ? (50 * (index + 2)) : (2 * (index + 2))
甚至:
duration: (index + 2) * (parentRect.opacity ? 50 : 2)