Bonjour tout le monde,

J'ai une QTreeview qui affiche un modèle contenant 2 colonnes par item. Chaque item contient un booléen et un nom. Je tiens à préciser que je ne souhaite pas utiliser QStandardItem et QStandardItemModel car je vais rajouter des éléments dans chacun de mes items. De plus je ne souhaite pas utiliser QTreeWidget car je dois partager mon modèle à travers mon application.

Pour ajouter un item, je récupère le QModelIndex courant avec la méthode QTreeWidget::selectionModel()->currentIndex(), puis je récupère le nombre d'enfant associés à l'item et j'insère une nouvelle ligne à partir de l'index courant.
Cette méthode fonctionne lorsque je sélectionne la première colonne de mon item mais lorsque je sélectionne la seconde, j'obtiens n'importe quoi (cf les images).

Nom : treeView_Expected.png
Affichages : 282
Taille : 4,3 Ko Comportement attendu

Nom : treeView_Wrong.png
Affichages : 273
Taille : 11,3 Ko Comportement bizarre lorsque je sélectionne mon item à partir de la seconde colonne et j'ajoute un nouvel item.

Pour info, quelque soit la colonne sélectionnée, j'obtiens bien le bon item associé. De plus, l'item enfant est correctement ajouté dans mon modèle.

Voici les bouts de codes qui me permettent d'ajouter un item à mon model.

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
23
24
25
//Partie vue
void TreeView::on_addButton_clicked()
{
	QModelIndex index = ui->treeView->selectionModel()->currentIndex();
 
	Model * model = static_cast<Model*>(ui->treeView->model());
	int row = 0;
	Item * currentItem = model->getItem(index);
        // Récupère la taille des enfants pour ajouter une ligne à la fin
	row = currentItem->children().size();
	model->insertRow(row, index);
}
 
//Partie Modèle
bool Model::insertRows(int row, int count, const QModelIndex &parent)
{
	Item *parentItem = getItem(parent);
	bool success;
 
	beginInsertRows(parent, row, row + count - 1);
	success = parentItem->insertChildren(row, count);
	endInsertRows();
 
	return success;
}
Je n'arrive pas à comprendre ce que je fais de travers. Un peu d'aide svp?

Merci!