Bonjour,
J'ai une class TreeModel
qui hérite de QAbstractItemModel
. Une instance de cette class est passé en modèle à une QTreeView
. Lorsque je sélectionne un élément - currentChanged
-, un signal est envoyé, le QModelIndex
courant est stocké dans une variable puis, grosso modo, j'affiche un widget avec un bouton "Supprimer".
Au clique sur ce dernier, je lis le contenu de currentIndex
et l'enlève de l'instance de mon TreeModel
. Ainsi, quand j'ai deux élément dans mon arbre, supprimer le premier fonctionne et fait sélectionner le second - qui devient premier. Mais quand je réitère le clique, ça ne fonctionne plus et on remarque que l'attribut row du second index - qui est devenu premier - reste à 1. Autrement dit :
- Ajout d'un index : indexes.rows == [0]
- Ajout d'un index : indexes.rows == [0, 1]
- Suppression du deuxième index : indexes.rows == [0] (ça fonctionne)
- Ajout d'un index : indexes.rows == [0, 1]
- Suppression du premier index : indexes.rows == [1] (au lieu de [0])
- Suppression de l'index restant : impossible car
index.row() == 1
, alors qu'il n'y a qu'un index dans le modèle
Le dépôt est ici et s'organise ainsi :
- controllers :
- tree_editor.py : envoie le signal à l'appui du bouton
- tree_options.py : relaie le signal vers main_window.py
- tree_view.py : envoie le signal lors d'un changement d'item courant
- main_window.py : reçoit le signal de tree_view.py et stocke l'index courant dans un attribut. Puis, elle reçoit le signal de tree_options.py, lit la valeur de l'index courant et demande au modèle de le supprimer via
removeIndex
- models :
- node.py : représente un item dans l'arbre
- tree_model.py : hérite de
QAbstractItemModel
Merci !