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 :

Comportement étrange de QTreeView


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut Comportement étrange de QTreeView
    Bonjour à tous

    J'ai un peu de mal à comprendre comment QTreeView parcourt les QAbstractItemModel et quelles fonctions il appelle.
    Pour tester, j'ai créé une simple classe héritant de QAbstractItemModel et qui contient un arbre (codé à la main, dans un QStandardItemModel). Ma classe ne fait qu'appeler la fonction du QStandardItemModel. Par exemple, pour data() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QVariant TableToTreeProxyModel::data(const QModelIndex &index, int role) const
    {
        return sourceModel()->data(index, role);
    }
    J'ai surchargé les fonctions qui doivent l'être normalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
    QModelIndex parent(const QModelIndex &child) const;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
    int rowCount(const QModelIndex &parent) const;
    int columnCount(const QModelIndex &parent) const;
    Qt::ItemFlags flags(const QModelIndex &index) const;
    J'ai également affiché mon arbre avec une simple fonction récursive qui utilise les fonction data(), hasChildren(), rowCount() et index() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void drawTree(QAbstractItemModel* tree, QModelIndex const& parent, int level)
    {
        QString s = "";
        QString t = s.rightJustified(level*2, ' ');
        qDebug() << t + tree->data(parent).toString();
        if (tree->hasChildren(parent))
        {
            for (int row = 0; row  < tree->rowCount(parent); ++row )
            {
                drawTree(tree, tree->index(row, 0, parent), level+1);
            }
        }
    }
    Par contre, quand j'essaie d'afficher mon arbre dans un QTreeView, rien de s'affiche (alors que le QStandardItemModel s'affiche correctement).

    Des idées ?

    Merci

    PS : j'ai également essayé d'utiliser un QAbstractProxyModel sans succès alors qu'un QSortFilterProxyModel fonctionne.

  2. #2
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Par défaut
    Salut,

    À première vue, j'aurais tendance à me demander si on entre bien dans la condition if (tree->hasChildren(parent)) du fait que cette fonction est généralement réimplémentée dans les sous-classes de QAbstractItemModel.

    Après, on peut éventuellement se demander si tree->data(parent) retourne bien quelque chose. J'avais lu quelque part que l'on utilisait internalPointer() plutôt que sourceModel(). Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    return item->data(index.column());
    Je ne pense pas pouvoir en dire plus avec ce que tu présentes ici, donc j'espère que ces pistes pourront t'aider.

    Bonne continuation,
    Amnell.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

Discussions similaires

  1. [Forms6i] Un IF-ELSIF au comportement étrange
    Par lafouine dans le forum Forms
    Réponses: 11
    Dernier message: 13/09/2005, 16h40
  2. Comportement étrange apres une désinstallation
    Par Sunchaser dans le forum Excel
    Réponses: 4
    Dernier message: 06/08/2005, 20h44
  3. comportement étrange d'une jointure ...
    Par amenis dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 10/02/2005, 22h27
  4. [Système][Runtime][Exec] Comportement étrange au lancement de BeSweet
    Par divxdede dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/06/2004, 10h54
  5. Réponses: 2
    Dernier message: 22/09/2003, 12h23

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