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.