Sto cercando di rendere sequenziali le animazioni visibili. Ho una funzione javascript, che chiama myModel.move() due volte. Ho un GridView per mostrare myModel e ho animazione "Comportamento su x", quindi posso vedere i movimenti visivamente. Ma entrambi gli animatori di movimento sono in parallelo (il piccolo ritardo tra loro non è evidente).QML: attendere fino al termine delle animazioni
La mia idea era di aggiungere un contatore di quante animazioni erano state avviate e quante di esse erano già finite. Qualcosa come questo;
Behavior on x {
NumberAnimation {
id: animationX;
duration: 500;
onRunningChanged: {
if (animationX.running) {
console.log("Animation start");
myModel.busy = myModel.busy + 1
} else {
console.log("Animation stop");
myModel.busy = myModel.busy - 1
}
}
}
}
Funziona come previsto. Quindi, aggiungo un ciclo alla mia funzione javascript per attendere fino a quando tutte le animazioni sono terminate.
ListModel {
id: myModel
property int busy: 0
function doSomething() {
myModel.move(...)
while (myModel.busy) {}
myModel.move(...)
}
}
Ecco il problema. Vedo che dopo la prima mossa() sono iniziate tutte le animazioni necessarie, ma non è possibile vedere nulla e nessuna animazione completata. Ho una specie di situazione di stallo. Come risolvere questo?
Sì, lo so ... domande semplificate producono risposte semplificate :-(In realtà, voglio avere molti myModel.move consecutivi diverso (...) chiamate. Tuttavia, il suggerimento è utilizzabile (vedi soluzione che ho postato sotto) – meolic
Un ciclo occupato non è una buona idea se si desidera mantenere le prestazioni – trusktr
@trusktr e dove vedi dico che è una buona idea? – UmNyobe