Création de modèles Qt pour les vues d'arborescence
Je suis en train d'écrire une application en Qt (C++) et j'ai besoin de représenter une structure d'objet dans une vue en arborescence. L'une des façons de le faire est de créer un modèle pour cela, mais je suis encore assez confus après la lecture de la documentation de Qt sur le sujet.
La "structure" que j'ai est assez simple - il y a un Project
objet qui détient Task
objets dans un std::vector
conteneur. Ces tâches peuvent également contenir des tâches enfants.
Je l'ai déjà écrit des méthodes pour lire & écrire ces projets vers/à partir de fichiers XML à l'aide de Qt classes XML.
Est plus là de la documentation ou de "lectures recommandées" pour la création de modèles à partir de zéro? Comment voulez-vous recommander j'ai commencer à mettre en œuvre?
source d'informationauteur Veeti
Vous devez vous connecter pour publier un commentaire.
Pour
QTreeView
les débutants, le principal défi est avec la compréhensionindex()
etparent()
. J'ai écrit un article à ce sujet il y a un moment:http://www.hardcoded.net/articles/using_qtreeview_with_qabstractitemmodel.htm
L'exemple de code est en Python, mais les principes restent les mêmes.
comme une alternative à ce qui a été dit par Virgile vous pouvez utiliser QStandardItemModel classe pour votre modèle et tout simplement construire votre arbre à l'aide de cette classe. Ci-dessous est un exemple:
espère que cette aide, en ce qui concerne
L'astuce de base pour obtenir ce travail est vraiment de rendre le modèle de la structure de données de mappage de droit. Quelque chose qui peut sembler dur, mais n'a pas besoin de l'être.
D'abord, à l'aide de la QAbstractItemModel::createIndex à construire un modèle d'index, vous pouvez vous référer à votre propre structure de données via le pointeur ou uint32 que vous pouvez ajouter à l'index, selon l'instance de createIndex que vous choisissez d'utiliser.
Deuxièmement, la structure claire dans l'esprit (comme vous semblez l'avoir), il est assez facile d'écrire le
parent
etindex
fonctions. La clé ici est de comprendre que la racine du modèle est un unintializedQModelIndex
instance. I. e.QModelIndex::isValid() == false
indique la racine.Troisièmement, si vous allez multi-colonne, n'oubliez pas que la première colonne a des enfants.
Quatrième, pour vérifier que vous faites les choses de la manière prévue, ne pas utiliser le ModelTest classe. Il surveille et vérifie votre modèle, de sorte que vous suivez les conventions que l'intervalle Qt vue du modèle des classes d'attendre.