Salut
Ce problème s'est présenté à moi il y a quelques semaines, et c'est pourquoi je vais te proposer une solution. En fait, l'objet QTreeView attends que tu lui passes en paramètre un model (regarde du côté de QDirModel par exemple), qui lui permettra de te créer une treeview directement.
Après, tout dépend du besoin que tu as pour ta treeview. Si tu as besoin d'une treeview automatique, qui affichera des labels de dossiers/fichiers déjà existants sur ton disque, alors c'est cet objet QTreeView qu'il te faudra utiliser.
Après, si tu as des besoins autres que celui-ci, ce que j'ai cru comprendre, c'est à dire construire et remplir ta treeview avec un fichier Xml ou alors par une connexion à une base de données, il te faut, comme tu y a pensé, utiliser l'objet QTreeWidget.
Avec cet objet, il faut tout d'abord que tu lui donnes un premier Item, qui correspond au noeud de premier niveau de ta treeview. Il faut donc que tu crées un nouveau "QTreeWidgetItem" et qu'en paramètre du constructeur tu lui mettes comme parent ta treeview.
QTreeWidgetItem * root = new QTreeWidgetItem(MonTreeWidget);
Tu peux ensuite utiliser la méthode setText pour lui passer le texte que tu veux afficher dans la treeview.
1 2 3
| root->setText(0, "Texte à afficher");
// Le 0 correspond à la colonne de la treeview dans lequel le texte s'affichera
// Le 0 correspond généralement au nom, le 1 à la taille, etc etc. |
Ensuite c'est très simple, et c'est le même principe.
Tu peux ajouter d'autres noeud de "premier niveau" sur le même principe, nouvel Item avec comme parent la treeview.
Puis, pour ajouter des sous-noeuds à ta treeview, c'est aussi simple, à la seule différence que quand tu crées ton nouvel Item, tu lui passes un QtreeWidgetItem comme parent, au lieu de lui passer le QtreeWidget.
Et ensuite tu crées tes descendances de la sorte
QTreeWidgetItem * child = new QTreeWidgetItem(root); // par exemple
J'espère que j'ai été assez clair, et que je ne t'ai pas plus embrouillé l'esprit
Autre précision, même si tu n'en parles pas pour le moment, quand tu voudras récupérer un clic de souris utilisateur dans la treeview, moi j'ai utilisé le signal :
void currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)
Ce signal est déclenché depuis le QTreeWidget, pas depuis l'item, et ça fonctionne très bien Mais saches qu'il y a d'autres signaux, à toi de voir lequel te conviendra le mieux
Partager