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 Discussion :

Qt et QStringListModel


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Par défaut Qt et QStringListModel
    Bonjour

    Je viens de me mettre à QT et j'ai un petit soucis. Donc j'essaie de faire un menu de selection assez classique.
    Pour le moment j'ai quelque chose qui ressemble à ça:




    Ce que j'essaie de faire c'est que lorsque l'on clique sur une fleche ça transmet l'élément d'un coté et de l'autre. Le problème c'est quand je clique il se passe rien alors que la variable elementSelectionne contient bien quelque chose.

    Voici mon code


    Fichier FenPrincipal.cpp

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #include "FenPrincipale.h"
     
    FenPrincipale::FenPrincipale()
    {
        //Zone Gauche
        listePaysGauche = new QStringList;
        *listePaysGauche << "France" << "Espagne" << "Italie" << "Portugal" << "Suisse";
        modeleGauche = new QStringListModel(*listePaysGauche);
        vueGauche = new QListView ;
        vueGauche->setModel(modeleGauche);
        vueGauche->setSelectionMode(QAbstractItemView::ExtendedSelection);
     
        //Zone milieu pour boutons
        flecheDroite = new QPushButton(">");
        flecheDoubleDroite = new QPushButton(">>");
        flecheGauche = new QPushButton("<");
        flecheDoubleGauche = new QPushButton("<<");
        QVBoxLayout *layoutbouton = new QVBoxLayout;
        layoutbouton->addWidget(flecheDroite);
        layoutbouton->addWidget(flecheDoubleDroite);
        layoutbouton->addWidget(flecheGauche);
        layoutbouton->addWidget(flecheDoubleGauche);
     
        //Zone droite
        listePaysDroite = new QStringList;
        listePaysDroite->append("Russie");
        modeleDroite = new QStringListModel(*listePaysDroite);
        vueDroite = new QListView ;
        vueDroite->setModel(modeleDroite);
        vueDroite->setSelectionMode(QAbstractItemView::ExtendedSelection);
     
        //Layout principal
        QHBoxLayout *layoutCentral = new QHBoxLayout;
        layoutCentral->addWidget(vueGauche);
        layoutCentral->addLayout(layoutbouton);
        layoutCentral->addWidget(vueDroite);
     
        setLayout(layoutCentral);
     
       connect(flecheDroite, SIGNAL(clicked()), this, SLOT(clicFlecheDroite()));   
    }
     
    void FenPrincipale::clicFlecheDroite()
    {
        QItemSelectionModel *selection = vueGauche->selectionModel();
        QModelIndexList listeSelections = selection->selectedIndexes();
        QString elementsSelectionnes;
        for (int i = 0 ; i < listeSelections.size() ; i++)
        {
            QVariant elementSelectionne = modeleGauche->data(listeSelections[i], Qt::DisplayRole);
            listePaysDroite->append(elementSelectionne.toString());
        }
    }


    Fichier FenPrincipal.h
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    #ifndef FENPRINCIPALE_H_
    #define FENPRINCIPALE_H_
     
    #include <QApplication>
    #include <QtGui>
     
    class FenPrincipale : public QWidget
    {
        Q_OBJECT
     
        public:
            FenPrincipale();
     
        private slots:
           void clicFlecheDroite();
     
     
        private:
        	QListView *vueGauche;
        	QStringListModel *modeleGauche;
        	QListView *vueDroite;
        	QStringListModel *modeleDroite;
        	QStringList *listePaysGauche;
        	QStringList *listePaysDroite;
        	QPushButton *flecheDroite;
        	QPushButton *flecheDoubleDroite;
        	QPushButton *flecheGauche;
        	QPushButton *flecheDoubleGauche;
     
    };
    #endif /* FENPRINCIPALE_H_ */

    J'ai l'impression que l'affichage n'est pas mis à jour. Si vous pouviez m'aider merci d'avance

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut.
    1- pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listePaysGauche = new QStringList;
    2- QStringListModel fait une copie de la QStringList. IL faut donc le mettre à jour
    http://qt.developpez.com/doc/4.4/qst...#setstringlist

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Salut.
    1- pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listePaysGauche = new QStringList;
    bah faut bien que je le fasse non ? j'ai déclaré un pointeur de type QStringList ds mon *.h donc faut bien faire un new QStringList avant de s'en servir.

    Sinon merci pour le setStringList, il fallait en effet remettre à jour la la vue. J'avais mal compris la doc

    Voici les modifs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void FenPrincipale::clicFlecheDroite()
    {
        QItemSelectionModel *selection = vueGauche->selectionModel();
        QModelIndexList listeSelections = selection->selectedIndexes();
        for (int i = 0 ; i < listeSelections.size() ; i++)
        {
            QVariant elementSelectionne = modeleGauche->data(listeSelections[i], Qt::DisplayRole);
            listePaysDroite->append(elementSelectionne.toString());
            listePaysGauche->removeOne(elementSelectionne.toString());
        }
        modeleDroite->setStringList(*listePaysDroite);
        modeleGauche->setStringList(*listePaysGauche);
    }
    pS: c'est trop bon Qt

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Digaboy Voir le message
    bah faut bien que je le fasse non ? j'ai déclaré un pointeur de type QStringList ds mon *.h donc faut bien faire un new QStringList avant de s'en servir.
    Ben ca sert à rien un pointeur sur une QStringlist...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Ben ca sert à rien un pointeur sur une QStringlist...

    et pourquoi donc ?

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Digaboy Voir le message
    et pourquoi donc ?
    Ben c'est un contenaire basé sur du RAII
    http://en.wikipedia.org/wiki/Resourc...Initialization
    Si tu le créé dynamiquement, tu perd l'intérêt du RAII...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Colorer un QStringListModel ligne par ligne
    Par Crabe05 dans le forum Qt
    Réponses: 5
    Dernier message: 09/06/2009, 09h41

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