J'ai besoin qu'on me confirme ce que je pense avoir compris concernant comment organiser mon code avec le système de model/view de Qt.
Le contexte d'abord. Je travaille sur ce projet open source : http://code.google.com/p/art-of-sequence/ (site de developpement - le site officiel n'est pas encore sur pieds) Donc tout est publique au cas ou vous voulez regarder les détails.
Pour résumer, j'ai un "language", AOSL, basé sur XML définis dans un XSD. A partir de ce XSD je génère une grosse partie du code C++ (moderne) d'une bibliothèque à laquelle j'ajoute quelques couches d'abstraction haut niveau pour manipuler les objets définis dans un fichier AOSL(xml) selon des règles spécifiques.
Puis j'utilise cette bibliothèque dans mon outil d'edition, AOS Designer (AOSD pour les intimes) qui utilise donc Qt.
Jusqu'ici tout va bien.
Maintenant je dois explorer certaines données de l'AOSL pour afficher des arbres et des graphes d'elments. Par exemple, j'ai mon type aosl::Object qui est un objet organisé en hierarchie classique, comme n'importe quel arbre (mais avec plusieurs racines).
Ces Objects sont donc définis via ce type aosl::Object et je peux le lire depuis une vue (un QWidget quelconque) pour afficher des infos.
Une des vues dont j'ai besoin c'est un simple arbre hierarchique comme là : http://doc.qt.nokia.com/latest/itemv...treemodel.html
J'ai bien vu le systeme de model/view et fort de mes lectures je me dit qu'il faudrait a priori que je procède de la façon suivante :
1. Créer un type qui contiendra les données d'un aosl::Object qui sont pertinentes les vues. (comme le TreeItem de l'example). Ce type prendrait un aosl::Object en parametre de construction pour en extraire les informations.
2. Créer un autre type qui contiendra les objets du type de 1. et qui héritera d'QAbstractItemModel. (comme le TreeItemModel de l'example). Ce type prendrait un conteneur avec des aosl::Objects pour construire tous les objets 1. nécéssaires pour représenter l'arbre.
3. J'utilise le type de 2. dans mes vues.
J'ai un poil l'impression d'être redondant par rapport a mes types déjà générés. aosl::Object pourrait directement remplacer le type en 1.? Ou il faut absolument qu'il y ait un type d'item specific pour les views?
Sinon globalement :
- est-ce que je suis sur la bonne voie, niveau design rapport a l'utilisation de Qt?
- est-ce qu'il y a quelque chose de louche?
- est-ce qu'il y a quelque chose que je devrais savoir rapport a l'organisation model/view et que je ne comprends apparament pas ici?
Merci de m'aider a fixer tout ça, ça me ferait gagner pas mal de temps d'expérimentation.![]()
Partager