Ho diversi stati che uso solo modificare alcune proprietà:QML eseguire JavaScript codice dopo il cambiamento di stato
Item {
id: props
property int someProperty: 0
// ...
states: [
State {
name: "firstState"
PropertyChange {
target: props
someProperty: 1
// ...
}
},
State {
name: "secondState"
PropertyChange {
target: props
someProperty: 1
// ...
}
}
]
onStateChange: doSomething(someProperty)
}
Da diversi stati potrebbero avere lo stesso valore per someProperty
Non posso contare sul segnale somePropertyChange
, ma non posso nemmeno contare sullo onStateChange
(come nell'esempio) dal momento che quando viene eseguito, le proprietà sono invariate.
Quindi, come posso eseguire doSomething()
ogni volta che lo stato cambia? C'è un modo migliore per fare questo genere di cose con QML
?
Dove si esegue il comando che uno stato dovrebbe cambiare? Qui puoi anche eseguire il tuo metodo "doSomething()". Inoltre è possibile utilizzare i collegamenti di proprietà per modificare le proprietà: questo è il modo migliore. QML è un linguaggio dichiarativo! – sk2212
@ sk2212 Eseguo il comando per il cambio di stato in più parti attraverso l'applicazione, quindi mettere 'doSomething()' dappertutto non suona come una buona scelta (ma potrei creare una funzione che cambia stato ed eseguire 'doSomething()' di cambiare il valore di stato). Nell'applicazione reale 'someProperty' è il numero di secondi dopo il quale deve essere attivato un evento, se lo stato cambia il timer dovrebbe iniziare dall'inizio (se due stati hanno lo stesso numero di secondi il segnale' somePropertyChange' non viene attivato in tal modo il timer non si riavvia utilizzando un legame di proprietà). – lambdauser
Bene ... come si cambia lo stato attraverso l'applicazione? Fare riferimento all'ID in altri file qml? Forse dovresti anche dare un'occhiata alla proprietà 'running' dal componente' Timer'. – sk2212