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

Discussion :

Affichage de QListView / QStandardItemModel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Par défaut Affichage de QListView / QStandardItemModel
    Bonjour,

    Toujours en pleine découverte de C++ et de Qt, j'essaie d'afficher une liste actualisée cochable de répertoires dont les chemins sont entrés dans une QLineEdit.
    Mais rien ne s'affiche depuis que j'ai modifié la fonction actualiserAfficheRep() décrite ci-dessous, qui fonctionnait très bien avec une QStringList que j'envoyais dans un QStringListModel, mais sans possibilité de cocher les items...

    J'ai comme variables :
    • m_lineEditChoixRep : la QLineEdit recevant le chemin du dossier à ajouter à la liste
    • m_listeRepModele : le modèle de type QStandardItemModel contenant les données de la liste des dossiers
    • m_listViewRep : de type QListView, absent de cette fonction, lié au modèle m_listeRepModele


    voici le code de la fonction sensée mettre à jour la liste des dossiers, cette fonction appartenant à ma classe mainWindow contenant l'intégralité du code de la fenêtre affichée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void MainWindow::actualiserAfficheRep()
    {
        QString pathTexte(m_lineEditChoixRep.text());
        QDir path;
        // vérifie l'existence du dossier et son absence dans la liste des dossiers
        if ( path.exists(pathTexte) && QList<QStandardItem*>(m_listeRepModele.findItems(pathTexte)).isEmpty() )
        {
            // ajout à la liste en 1ère position et affichage auto dans m_listViewRep
            QStandardItem item(pathTexte);
            item.setCheckable(true);
            m_listeRepModele.insertRow(0,&item);
        }
    }
    Merci d'avance pour vos commentaires sur ce qui ne va pas dans ce code et les pistes de solution pour y arriver.

  2. #2
    Membre confirmé
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Par défaut
    Le problème semble venir de la méthode de déclaration de ma variable item.
    Avec un item pointeur et une allocation dynamique, cela fonctionne :
    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 MainWindow::actualiserAfficheRep()
    {
        QString pathTexte(m_lineEditChoixRep.text());
        QDir path;
        // vérifie l'existence du dossier et son absence dans la liste des dossiers
        if ( path.exists(pathTexte) && QList<QStandardItem*>(m_listeRepModele.findItems(pathTexte)).isEmpty() )
        {
            // ajout à la liste en 1ère position et affichage auto dans m_listViewRep
            QStandardItem *item;
            item = new QStandardItem(pathTexte);
            item->setCheckable(true);
            m_listeRepModele.appendRow(item);
        }
    }
    Mais je ne comprends pas pourquoi cela ne fonctionne pas avec une déclaration statique ??
    Pouvez vous m'expliquer ?
    Est on condamné à utiliser uniquement des pointeurs et allocations dynamiques avec Qt ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est seulement du à la portée de ta variable item.
    • Déclarée en statique, elle sera détruite à la fin de l'exécution de ta fonction membre actualiserAfficheRep().
    • Déclarée en dynamique, elle sera détruite par un delete ou la destruction de son parent.

  4. #4
    Membre confirmé
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Par défaut
    Merci ! C'est effectivement très logique

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/06/2011, 20h29
  2. Réponses: 0
    Dernier message: 06/04/2010, 18h00
  3. QListView : encapsulation/affichages
    Par ledjlale dans le forum Qt
    Réponses: 2
    Dernier message: 08/11/2006, 09h12
  4. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

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