Я хочу изменить состояние после того, как анимация перехода завершена. У меня есть следующий код, который достигает эту цель, хотя, кажется, своего рода хак:Изменение состояния после завершения анимации перехода
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
Rectangle {
id: root
width: 400
height: 400
Rectangle {
id: rect
color: "blue"
width: 50
height: 50
anchors.centerIn: parent
MouseArea {
anchors.fill: parent
onClicked: rect.state = "animating"
}
states: [
State {
name: "animating"
PropertyChanges {
target: rect
rotation: 360
}
},
State {
name: "shrinking"
PropertyChanges {
target: rect
scale: 0
}
}
]
transitions: [
Transition {
from: ""
to: "animating"
SequentialAnimation {
RotationAnimation {
duration: 500
}
ScriptAction {
script: rect.state = "shrinking"
}
}
},
Transition {
from: "animating"
to: "shrinking"
NumberAnimation {
property: "scale"
duration: 500
}
}
]
}
}
Есть ли лучше способ сделать это без использования ScriptAction
? Обратите внимание, что мне нужно второе состояние, и я не хочу просто консолидировать анимацию масштаба в SequentialAnimation
перехода animating
.
Этот вопрос является дубликатом https://stackoverflow.com/questions/22902769/how-to-switch-to-another-state-at- end-of-a-transition-in-qml, но существующее решение более чистое, чем ответ на исходный вопрос. – cmannett85
Мне даже не нравится мое решение, поэтому я надеюсь, что есть лучший. : p – Mitch
Тот факт, что ваше состояние называется «сжатием» вместо «сжатого», является признаком того, что они не являются реальными состояниями, а переходы реализуются как состояния. Не можете ли вы объединить оба перехода с помощью SequentialAnimation? – jturcotte