IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Quick Discussion :

Conserver l'index courant d'une SwipeView en délégué


Sujet :

Qt Quick

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 97
    Points : 55
    Points
    55
    Par défaut Conserver l'index courant d'une SwipeView en délégué
    Bonjour à tous,

    J'utilise une ListView dont le delegate est une SwipeView contenant plusieurs éléments à afficher.
    Mon problème est que lorsque le modèle est modifié, la ListView se met à jour et le currentIndex de la SwipeView est remis à zéro.
    Dans mon cas, le modèle est mis à jour toutes les secondes, donc la SwipeView revient sur la première page toutes les secondes :/, ce qui est embettant.

    Ci dessous la partie intéressante du code (simplifiée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    ListView
    {
                    id: idListViewComptage
     
                    /* position et dimensions */
     
                    model: accesResultats.mListData // modele qui change toutes les secondes 
     
                    delegate: ResultatDisplay
                    {
                        resultat: model.modelData // ResultatDisplay affiche les data
                        visible: true
     
                       /* position et dimensions */ 
                    }
    }
    ResultatDisplay.qml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Item
    {
        id: rootItem
     
        property ResultatTraitement resultat
     
            SwipeView
            {
                id: view
                anchors.fill: parent
     
                // currentIndex: 0 // a chaque fois que le modele est mis a jour, cet index est remis à zéro, ce qui fait que la SwipeView revient constamment à la première page 
     
                /* affichage des data */
     
           }        
    }
    Avez vous une idée pour contourner ce problème ?
    La manière d'afficher les résultats est elle la bonne ?

    Merci pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Bonjour,

    Je pense que le plus simple serait de sauvegarder l'index de la SwipView pour chaque élément du modèle.
    Il faudrait donc ajouter un attribut à la classe ResultatTraitement. Puis le gérer dans data() et setData() du modèle.

    Code qt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    QVariant MyModel::data(const QModelIndex &index, int role) const
    {
        ...
        case ViewIndexRole:  return mydata->viewIndex();
        ...
    }
     
    bool CustomerModel::setData(const QModelIndex &index, const QVariant &value, int role)
    {
        ...
        case ViewIndexRole:  mydata->setViewIndex(value.toInt());
        ...
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SwipeView
            {
                id: view
                anchors.fill: parent
     
                //On garde la synchronisation sur la position (au cas ou l'index peut être modifiée depuis l'extérieur)
                currentIndex: resultat.viewIndex         
     
                //On sauvegarde l'index lors d'un changement
                onCurrentIndexChanged: resultat.viewIndex = currentIndex
     
                /* affichage des data */
     
           }
    L'inconvénient est qu'il faille modifier ResultatTraitement. Par contre l'avantage est que l'on peut afficher le modèle dans plusieurs vues simultanées et garder la synchronisation de l'index entre les vues.

    Y'a-t-il une raison précise pour que le modèle change chaque seconde ? Je recommanderais plutôt un changement uniquement lorsque les valeurs changes. A moins bien sûre que les données du modèle changent en continu.

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/05/2013, 14h57
  2. Réponses: 3
    Dernier message: 06/09/2012, 16h23
  3. Trouver l'index courant dans une liste
    Par Hepil dans le forum C#
    Réponses: 5
    Dernier message: 27/09/2010, 12h25
  4. Obtenir l'index de la ligne courante dans une repeating table
    Par stephane eyskens dans le forum InfoPath
    Réponses: 7
    Dernier message: 25/05/2007, 17h55
  5. chercher l'index maxi d'une table
    Par picoti2 dans le forum Bases de données
    Réponses: 13
    Dernier message: 22/03/2004, 08h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo