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