Comment changer immédiatement l'index dans OptionSelector (sans animation)? [fermé]

16

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!

Aaron Hastings
la source
Pourriez-vous s'il vous plaît nous donner juste le code suffisant pour reproduire votre problème? La vidéo est utile bien sûr mais il est assez difficile de vous aider sans un extrait de code à réutiliser (Voir sscce.org )
Sylvain Pineau
Salut Sylvain. Toutes mes excuses pour le retard. Voici un fichier QML que vous pouvez utiliser pour tester. Créez simplement un nouveau projet d'Ubuntu Simple UI et remplacez votre fichier QML principal par ceci: pastebin.ubuntu.com/9534780
Aaron Hastings

Réponses:

0

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.

Martin Owens -doctormo-
la source