更新 NumberAnimation 中的字段
Updating a field in NumberAnimation
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 的值。
还有其他方法吗?
在c++和qml之间通信的最佳方式是使用信号槽模型。不要使用 findChild()
。我建议您执行以下步骤:
在你的 C++ 中声明一个信号并将它连接到一个插槽,这实际上是你的 qml rootObject 的一个 javascript 函数。
在此插槽内(在我的示例中为setObjectProperty
)使用类似
的东西
函数 setObjectProperty()
{
yourObjectId.setProperty(真);
}
其中 yourObjectId 是您要操作的 Item
的 id
在你的 Item 中声明一个 setProperty
函数(正如我命名的,当然你可以选择任何你喜欢的名字 =)))
函数 setPoperty ( val )
{
internalObjectId.someProperty = 值;
}
这应该行得通。如果还有任何问题 - 让我知道,我可以为您提供一些代码。
感谢您的回复,但我找到了解决方案。
其实我是想通过修改to和from的值实现一个针的平滑过渡,因为我直接更新abc的时候并没有平滑过渡。
但是使用下面的方法我得到了平滑的针过渡。
从 cpp 代码更新 abc 值并在您的 qml 文件中添加以下代码。
Behavior on kph{
NumberAnimation{duration: 2000}
}
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 的值。
还有其他方法吗?
在c++和qml之间通信的最佳方式是使用信号槽模型。不要使用 findChild()
。我建议您执行以下步骤:
在你的 C++ 中声明一个信号并将它连接到一个插槽,这实际上是你的 qml rootObject 的一个 javascript 函数。
在此插槽内(在我的示例中为
的东西setObjectProperty
)使用类似函数 setObjectProperty() { yourObjectId.setProperty(真); }
其中 yourObjectId 是您要操作的 Item
的 id
在你的 Item 中声明一个
setProperty
函数(正如我命名的,当然你可以选择任何你喜欢的名字 =)))函数 setPoperty ( val ) { internalObjectId.someProperty = 值; }
这应该行得通。如果还有任何问题 - 让我知道,我可以为您提供一些代码。
感谢您的回复,但我找到了解决方案。
其实我是想通过修改to和from的值实现一个针的平滑过渡,因为我直接更新abc的时候并没有平滑过渡。
但是使用下面的方法我得到了平滑的针过渡。
从 cpp 代码更新 abc 值并在您的 qml 文件中添加以下代码。
Behavior on kph{
NumberAnimation{duration: 2000}
}