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):
Nom : Tree.png
Affichages : 120
Taille : 19,9 Ko
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 :
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;
 
	...
}
Mon problème est le suivant je ne comprend pas comment faire fonctionner ma structure de donnée avec cette histoire de "root.

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 :
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;
}
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.

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.