【发布时间】:2023-04-06 03:01:01
【问题描述】:
我在 QML 中有一个通用的 QtObject,我想为它的属性设置动画,并且我想一起启动/停止它们。我写了以下代码,但是 Qt Creator 错误:qrc:/DummyData.qml:11 Cannot assign to non-existent default property
...其中第 11 行是带有ParallelAnimation { 的行。
import QtQuick 2.5
QtObject {
property real windowFrontLeftOpenPct: 0.0
property real windowFrontRightOpenPct: 0.0
property real windowRearLeftOpenPct: 0.0
property real windowRearRightOpenPct: 0.0
property bool windowAnimationsActive: false
ParallelAnimation {
running: windowAnimationsActive
SequentialAnimation on windowFrontLeftOpenPct {
loops: Animation.Infinite
NumberAnimation { from:0; to:1; duration:2000; easing.type:Easing.InOutSine }
NumberAnimation { from:1; to:0; duration:2000; easing.type:Easing.InOutSine }
}
SequentialAnimation on windowFrontRightOpenPct {
loops: Animation.Infinite
NumberAnimation { from:0; to:1; duration:2000; easing.type:Easing.InOutSine }
NumberAnimation { from:1; to:0; duration:2000; easing.type:Easing.InOutSine }
}
SequentialAnimation on windowRearLeftOpenPct {
loops: Animation.Infinite
NumberAnimation { from:0; to:1; duration:2000; easing.type:Easing.InOutSine }
NumberAnimation { from:1; to:0; duration:2000; easing.type:Easing.InOutSine }
}
SequentialAnimation on windowRearRightOpenPct {
loops: Animation.Infinite
NumberAnimation { from:0; to:1; duration:2000; easing.type:Easing.InOutSine }
NumberAnimation { from:1; to:0; duration:2000; easing.type:Easing.InOutSine }
}
}
}
我不能在一个并行动画中混合不同的目标属性吗?
注意:在这种情况下,解决方法是删除 ParallelAnimation 包装器并将 running:windowAnimationsActive 应用于每个 SequentialAnimations。但是,我认为这不是一个通用的解决方案,因为它不允许我通过单个父包装器轻松暂停和恢复许多动画。
【问题讨论】:
-
QtObject没有默认属性。当您在 QML 中的可视元素中声明子项时,它们会被添加到Item的特殊默认属性中。QtObject has none. You'll have to be explicit about the instantiation of the childParallelAnimation` - 将其放入自定义命名属性中。 AFAIK,这个问题与动画无关。最小的测试用例是一个QtObject,您在其中创建 any QML 子对象:QtObject { QtObject {} }。 -
@KubaOber 这听起来很合理。我可以问你为什么评论而不是回答吗?
-
我通常只有在我有时间运行一些代码以确保我没有写满它时才会回答:) 我最近几个月也没有写过任何 QML,所以我那个地区有点生锈。比抱歉更安全,我讨厌在答案中误导。不过,评论是公平的游戏:)