Item {
id: valueSource
objectName: "valueSource"
property real myvariable: 0
property real abc: 0
property real xyz: 0
SequentialAnimation {
running: true
loops: 1
PauseAnimation {
duration: 1000
}
PropertyAction {
target: valueSource
property: "start"
value: false
}
SequentialAnimation {
loops: Animation.Infinite
ParallelAnimation {
NumberAnimation {
target: valueSource
property: "abc"
easing.type: Easing.InOutSine
from: a //0
to: b //100
duration: 3000
}
NumberAnimation {
target: valueSource
property: "xyz"
easing.type: Easing.InOutSine
from: c //1
to: d //50
duration: 3000
}
}
}
}
我第一次使用qt和cpp。所以请帮助我,即使这是一个愚蠢的问题。 我可以使用findChild(“valueSource”)从c ++代码更新abc和xyz的值,但我想在NumberAnimation中更新'from'和'to'的值。 1)我尝试在NumberAnimation中添加字段objectName,然后在cpp代码中使用此对象,因为我用来更新abc和xyz但不能修改from和to的值。 2)还尝试使用a,b,c,d变量。 a,b,c,d的值从cpp代码更新并反映在qml中,但它没有更新to和from的值。
我还有其他办法吗?
答案 0 :(得分:1)
在c ++和qml之间进行通信的最佳方式是使用信号槽模型。不要使用findChild()
。我建议你采取以下步骤:
在c ++中声明一个信号并将其连接到一个插槽,这实际上是qml rootObject的javascript函数。
在此广告位中(我的示例中为setObjectProperty
)使用类似
function setObjectProperty() { yourObjectId.setProperty(true); }
其中yourObjectId是您想要操作的id
的{{1}}
在你的Item中声明一个Item
函数(因为我命名它,你可以选择你喜欢的任何名称=)))
function setPoperty(val) { internalObjectId.someProperty = val; }
这应该有效。如果有任何问题 - 让我知道,我可以为你提供一些代码。
答案 1 :(得分:0)
感谢您的回复,但我得到了解决方案。
实际上,通过修改to和from值我想实现针的平滑过渡,因为当我直接更新abc时,我没有得到平滑过渡。
但是使用以下方法我得到了针的平滑过渡。
从cpp代码更新abc值,并在qml文件中添加以下代码。
Behavior on kph{
NumberAnimation{duration: 2000}
}