Vous n'êtes pas identifié(e).
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
Pages : 1
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
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
Pages : 1
| Liens interne à QtFR | Les partenaires de QtFR | Liens pour les sites officiels Qt | Liens sur les ressources Qt |
|---|---|---|---|
| Communauté QtFR sur Google+ | Monkey Studio | Télécharger Qt | Notre tutoriel |
| QtFR sur Twitter | ZeGrapher | Site officiel Qt | Documentation Qt |
| IRC box | Qt Blog | Qt Centre | |
| Galeries | Qt Wiki | Qt Apps | |
| Contactez-nous | Qt Quarterly |