Dans mon application, j'utilise un OptionSelector pour choisir parmi une liste de stations de vélo. J'ai également un composant de carte avec des repères pour chaque station.
Lorsque j'appuie sur un repère, il modifie également le sélecteur d'options sur l'index de la station correspondante, car il s'agit d'un bon UX.
Ce qui n'est pas bon, c'est comment l'OptionSelector répond à ce changement d'index, qui s'anime comme s'il avait été effleuré par le doigt de l'utilisateur. En d'autres termes, longtemps après que l'utilisateur a tapé sur le marqueur de carte et reçu toutes les informations dont il a besoin, l'OptionSelector "tourne" toujours vers l'index de la station.
Voici une vidéo illustrant ce comportement: https://www.youtube.com/watch?v=jXKWlAmNYsw
J'aimerais que ce OptionSelector change juste son index immédiatement, sans animation. Y a-t-il un moyen de faire cela?
Voici comment je fais les choses actuellement. Je suis plus qu'heureux d'être corrigé si ce n'est pas la bonne façon de procéder. J'utilise un WorkerScript (un thread QML, plus ou moins) pour faire des appels API. Lorsque ce WorkerScript revient, il déplace l'OptionSelector comme suit:
WorkerScript {
id: queryStationsWorker
source: "../js/getstations.js"
onMessage: {
[...]
// Move the OptionSelector to the corresponding station's index.
stationSelector.selectedIndex = getLastStationIndex(lastStation.contents.stationName, stationsModel)
/*
* For the sake of clarity:
*
* getLastStationIndex() is a function which just returns an integer.
* lastStation is a U1DB database used for state saving.
* stationsModel is a model containing all of the stations.
*/
}
}
Toute aide ou compréhension appréciée - cheers!
la source
Réponses:
Vous pouvez voir une copie du qml OptionSelector ici, il utilise UbuntuNumberAnimation lorsqu'il n'est pas développé. Il n'y a pas d'option pour le désactiver et si la fonctionnalité est requise, vous devrez patcher en amont et attendre un certain temps pour les nouvelles versions de la bibliothèque.
Vous pouvez cependant créer votre propre widget de sélecteur ouvert, supprimer la partie d'animation et vous assurer de la renommer pour l'utiliser dans votre code. Je recommande cette route.
la source