Bonjour à tous,
je galère a comprendre comment s'utilise les QTreeView et surtout comment faire le model associé.
Je vous explique mon projet je souhaite faire une fenêtre qui doit être conçu un comme cette maquette (par soucis de confidentialité j'ai changé totalement mon architecture mais ça reste du même cru):
Je connais assez bien l'utilisation des QTableView, avec leur model et delegate mais c'est la première fois que je m'attaque au QtreeView.
Je souhaite que les Param 1 et 2 soient modifiables en tant que réel et le param 3 modifiable par le biais d'une combo Box.( donc utilisation d'un delegate j'imagine)
J’avoue me perdre sur comment créer mon model sachant qu'un "Elément" est propres à son "Etape" et qu'il ne peut pas y avoir de "sousEtape". Mais autant d'étape qu'on veut et autant d'Element par Etape qu'on veut également.
Ma logique de stockage des données et donc quelque chose comme ça :
Mon problème est le suivant je ne comprend pas comment faire fonctionner ma structure de donnée avec cette histoire de "root.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 typedef enum sens {HORIZONTAL, VERTICAL}enSens; typedef struct Element { double param1; double param2; sens param3; }stElement; typedef struct Etape { QString intitule; QVector<Element> lesElements; }stEtape; class MonModele : public QAbstractItemModel { private : QVector<Etape> mesEtapes; ... }
par exemple j'ai vu que pour la méthode rowCount par exemple il fallait modifier la valeur en fonction de l'emplacement dans mon architecture( N'hésitez pas a me corrigé si je me trompe).
Voici en semi pseudo code se que je veux dire :
dans mon stockage des données je n'ai pas vraiment de "root" du coup comment savoir si leParent est bien ce "root" en gros comment reconnaître qu'elle est l’élément actif.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int MonModele::rowCount(const QModelIndex &leParent) const { if ( leParent <correspond a l'etape n> ) return mesEtapes[n].lesElements.size(); else if (leParent <correspond a l'element root>) return mesEtapes.size(); else // si ca correspond a un "Element" return 1; }
LA methode rowCount n'est qu'un exemple mais en gros comment adapté mon modèle a mon architecture de donnée.
Je n'ai pas trouvé grand chose comme tutoriel qui n'utilise pas des classes pré-faites comme QStandardItem ou QFileSystemModel, ou alors avec des éléments qui peuvent s'imbriquer a l'infini.
Pour ma part les Etapes sont restreinte a un premier "niveau" et les "Element" au second niveau.
Pourriez vous m'indiquer comment faire fonctionner tout cela au mieux?
Merci d'avance.
Partager