如何访问 NumberAnimation 的属性并从第一个 QML 为后一个 QML 制作动画?

问题描述 投票:0回答:1

我有两个 qml,其中一个包含动画,即animation.qml,另一个包含数据,即 data.qml。

我想运行我的animation.qml来对data.qml中的内容进行动画处理,为此我想访问另一个模型中的QProperty的QString。

如何达到同样的效果?

我尝试为已定义的属性创建别名,但它无法使用语法工作

property alias differentNameForProperty: currentNameOftheProperty

提前谢谢您。

这是一个例子,

标记.qml

Item {
    Student {
        id: student
    }

    Item {
        SequentialAnimation {
            id: animination1

            NumberAnimation {
                duration: 1250
                target: student
                property: student.newMarks
                from: 0
                to: 100
            }
        }
    }

    Connections {
        target: marksModel

        function onCallMarks() {
            animination1.start()
        }
    }
}

学生.qml

Item {
    id: id_parent
    property double oldMarks: 10
    property alias newMarks: oldMarks

    // Using oldMarks to toggle
    // the visibility of elements
}

当动画从 Marks.qml 运行时

newMarks
oldMarks
的更改将发生在 Student.qml 中,并且将播放动画。 我希望我的解释很清楚。 谢谢

animation qml qstring
1个回答
0
投票

我不知道这是否是你想要的......你的例子并没有真正起作用,所以我将它精简为一个可以运行的版本,但它可能不是你想要的。

您的示例在

property
中的
NumberAnimation
属性存在问题。此属性属于类型
string
。所以你真正想要写的是
property: "newMarks"
不需要 id 前缀,因为这已经通过
target
属性完成了。

import QtQuick

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    component Student: Rectangle {
        id: internal
        property double oldMarks: 10
        property alias newMarks: internal.oldMarks

        width: 100
        height: 100
        color: "red"
        // Using oldMarks to toggle the visibility of elements
        opacity: internal.oldMarks
    }

    Student {
        id: student
        anchors.centerIn: parent
    }

    SequentialAnimation {
        id: animation

        NumberAnimation {
            duration: 2500
            target: student
            property: "newMarks"
            from: 0
            to: 1
        }
    }

    Component.onCompleted: animation.start()
}
© www.soinside.com 2019 - 2024. All rights reserved.