是否可以暂时禁用(忽略/不显示)复杂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; ... }
}
如果当前数据对象的属性值发生变化,则需要动画。如果整个对象更改为另一个,则需要阻止动画。
答案 0 :(得分:1)
要禁用Animation
,有多种方式,正确的方法取决于Animation
的启动方式。
如果通过设置running
-property启动Animation
,您只需添加&& animationsEnabled
即可
条件,animationsEnabled
是一个属性,你必须在其他地方定义并相应地切换它。
如果您使用功能:run()
来启动Animation
,那么解决方案就是不能。
如果您使用Animation
Behavior
,Behavior
可以使用Behavior
s enabled
-property停用Animation
及其Transition
。
最后我能想到Behavior
s。就像// v
public void paintComponents(Graphics g) {
,Transition
has a enabled
- 属性一样,要停用它。
我希望我没有忘记一种动画方式,你会找到适合你问题的解决方案!