暂时禁用(忽略/不显示)复杂QML组件上的动画

时间:2017-06-08 14:56:26

标签: qt qml

是否可以暂时禁用(忽略/不显示)复杂QML组件上的动画,直到某个时间点?然后激活动画并像往常一样工作。

例如。 QML上的复杂页面显示对象的数据,有许多小动画。更改数据对象时,应忽略这些动画。

Rectangle {
    anchors.fill: parent
        property variant cppViewModel: MyCppViewModel {
            onBeforDataObjectChanged: {

            }
            onAfterDataObjectChanged: {

            }
        }

    Rectangle {
        id: idRect1
        Behavior on x { NumberAnimation { ... }}
        Behavior on y { NumberAnimation { ... }}
        x: cppViewModel.dataObject.offsetX
        y: cppViewModel.dataObject.offsetY
        scale: cppViewModel.dataObject.scale

        Rectangle {
            id: idRect2

            width: cppViewModel.dataObject.width
            heigth: cppViewModel.dataObject.heigth
            Behavior on width { NumberAnimation { ... }}
            Behavior on heigth { NumberAnimation { ... }}

            ColumnLayout {
                Rectangle {
                    Layout.preferredHeight: 100 * cppViewModel.dataObject.width1
                    Behavior on Layout.preferredHeight { NumberAnimation { duration: 500; easing.type: Easing.OutQuad; }}
                    //... Any number of children with animation
                }
            }
        }
    }

    PropertyAnimation { target: idRect1; property: "scale"; from: 0.9; to: 1.0; ... }
}

如果当前数据对象的属性值发生变化,则需要动画。如果整个对象更改为另一个,则需要阻止动画。

1 个答案:

答案 0 :(得分:1)

要禁用Animation,有多种方式,正确的方法取决于Animation的启动方式。

如果通过设置running-property启动Animation,您只需添加&& animationsEnabled即可 条件,animationsEnabled是一个属性,你必须在其他地方定义并相应地切换它。

如果您使用功能:run()来启动Animation,那么解决方案就是不能

如果您使用Animation BehaviorBehavior可以使用Behaviors enabled-property停用Animation及其Transition

最后我能想到Behavior s。就像// v public void paintComponents(Graphics g) { Transition has a enabled - 属性一样,要停用它。

我希望我没有忘记一种动画方式,你会找到适合你问题的解决方案!