Forum QtFR

La communauté francophone Qt

Vous n'êtes pas identifié(e).

Annonce

Qt 4: 4.8.4 - Qt 5: 5.0.2 - Qt Creator: 2.7.1 - Qt Installer: 1.3.0 - VS Qt 4: 1.1.11 - VS Qt 5: 1.2.1 - Monkey Studio: 1.9.0.4

#1 14-05-2012 23:52:43

betsprite
Membre(e) Qt
Inscription : 09-05-2012
Messages : 5

Tree model : problème conception

Bonsoir tout le monde,

Je cherche à réaliser une tree model dans un QTreeView de type suivant :

- Camp bleu

   - Arthur
         * 19 ans
         * Vosges
   - Julie
         * 24 ans
         * Bourgogne

- Camp vert

   - Jacques
          * 17 ans
          * Bretagne

Je suis donc allé sur http://kernelcoder.wordpress.com/2010/0 … framework/ et j'ai repris la structure du TreeModel avec les TreeItem.

Tel que je vois les choses, tout se passe avec les TreeItem. Autrement dit, les TreeItems vont pour certains représenter des objets avec une information sur l'équipe, d'autres vont avoir pour information le nom d'un objet Joueur, et enfin les derniers auront pour information les champs de l'objet Joueur comme l'âge.
Au final, seul la "data" va changer pour chaque TreeItem selon son niveau d'arborescence (niveau 1 -> equipe, niveau 2 -> nom d'un objet Joueur, niveau 3 -> champ d'un objet Joueur).
Aussi, pour savoir quelle donnée insérer entre une équipe, un nom de joueur et un champ du joueur, dans insertRows par exemple, je regarde la profondeur de l'index.
Jusque là, est-ce que ma vision est juste ?

Il reste cependant un dernier point qui me pose problème dans mon modèle. Tel que c'est fait pour le moment, je manipule donc des TreeItem qui forment mon TreeModel. Seulement, lorsque j'insère un ou des TreeItem ou que je les remove via insertRows(), removeRows(), voir d'autres surcharges utiles, je change bien le nomre d'enfants d'un noeud mais l'action n'a aucune influence sur ma structure de données formée par ma liste d'objets Joueurs. Comment rendre ce modèle plus adapté afin que quand j'insère un TreeItem, Je créé un objet Joueur avec les champs qui vont bien, lorsque je remove un TreeItem à un index donné, je retrouve bien dans ma liste de Joueurs le joueur concerné ?

Dois-je faire une sorte de lien entre un TreeItem et un objet Joueur ? comme un QMap par exemple ? Ou sinon, connaissez-vous la méthode appropriée ?

Merci beaucoup

Dernière modification par betsprite (15-05-2012 00:04:42)

Hors ligne

#2 17-05-2012 21:47:31

obiwankennedy
Membre(e) Qt
Inscription : 17-01-2008
Messages : 179

Re : Tree model : problème conception

Je pense que le mieux c'est de faire un Treeitem qui contient un joueurs et une liste de Treeitem (design pattern composite).

Dans ta fonction data de ton model, tu fais un bete if sur le parent.
Si le parent est null, c'est le premier niveau donc tu retournes l'equipe du joueurs.
Si le parent est pas null et que le parent du parent est null => 1er niveau, tu retournes le nom de la personne.
Sinon pour le reste, c'est une feuille donc tu renvoies la donnée. C'est un peu ce que tu as fait avec la profondeur.


Sinon quand tu dis que tu supprimes ou ajoutes des éléments par insertRows ou removeRows, tu appelles ces fonctions ou/et tu les as surchargées ?
Il te faut les surcharger. Dans ces fonctions, tu as bien mis des «beginInsertRows» , endInsertRows();, pareil pour des remove ?


Tu peux voir deux exemples de model de treeview, ici :
http://code.google.com/p/rolisteam/sour … istmodel.h
http://code.google.com/p/rolisteam/sour … tmodel.cpp

et ici

http://code.google.com/p/rolisteam/sour … tmodel.cpp
http://code.google.com/p/rolisteam/sour … eetmodel.h

Sinon dans un tree view tu peux avoir plusieurs colonnes, donc c'est pas mieux pour afficher les valeurs d'un objet (plutot que faire un profondeur de plus )?

J'espere que cela t'aidera.

Hors ligne

Pied de page des forums


Sitemap QtFR