0

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 的值。

我还有其他方法可以做到吗?

4

2 回答 2

1

在 c++ 和 qml 之间进行通信的最佳方式是使用信号槽模型。不要使用findChild(). 我建议您执行以下步骤:

  1. 在你的 c++ 中声明一个信号并将其连接到一个插槽,这实际上是你的 qml rootObject 的一个 javascript 函数。

  2. 在这个插槽内(setObjectProperty在我的例子中)使用类似的东西

    函数 setObjectProperty() { yourObjectId.setProperty( true ); }

其中 yourObjectId 是您想要操作id的一个Item

  1. 在您的 Item 中声明一个setProperty函数(正如我命名的那样,您当然可以选择任何您喜欢的名称 =)))

    函数 setPperty ( val ) { internalObjectId.someProperty = val; }

这应该有效。如果还有任何问题 - 请告诉我,我可以为您提供一些代码。

于 2015-12-01T09:27:34.520 回答
0

感谢您的回复,但我得到了解决方案。

实际上,通过修改 to 和 from 值,我想实现针的平滑过渡,因为当我直接更新 abc 时,我没有得到平滑的过渡。

但是使用以下方法我得到了针的平滑过渡。

从 cpp 代码更新 abc 值并在您的 qml 文件中添加以下代码。

    Behavior on kph{
        NumberAnimation{duration: 2000}
    }

于 2015-12-08T13:24:35.223 回答