2010-11-01 27 views
1

J'essaie d'utiliser QStandardItemModel pour représenter une hiérarchie de données, mais lorsque j'ajoute QStandardItems au modèle, je dois les affecter dans des variables membres d'objet ou les objets semblent être supprimés.Les objets semblent être supprimés s'ils ne sont pas affectés à la variable objet dans PySide

Par exemple

self.tree_model = QStandardItemModel() 
self.tree_model.setHorizontalHeaderLabels(['Category']) 
self.out_insertions = QStandardItem("Insertions") 
self.tree_model.invisibleRootItem().appendRow(self.out_insertions) 

fonctionne comme prévu (une ligne "Insertion" est inséré dans la colonne "Catégorie"). Mais si je supprime l'affectation de self.out_insertion, comme:

self.tree_model = QStandardItemModel() 
self.tree_model.setHorizontalHeaderLabels(['Category']) 
self.tree_model.invisibleRootItem().appendRow(QStandardItem("Insertions")) 

Il ne fonctionne pas (une ligne vide est affichée). J'utilise Qt 4.6.3 et PySide 0.4.1. Quelqu'un peut-il m'expliquer pourquoi cela arrive?

Merci à l'avance

~ Aki

Répondre

4

Votre objet se déchets collectés car aucune des références plus (Python) pour exister.

Ce comportement est décrit dans la 'things to be aware of' dans la documentation PyQt.

La plupart de ces problèmes (en terre PyQt) peuvent être évités par parenting (ce qui fait que Qt prend en charge au lieu de PyQt).

+0

Cela signifie que QStandardItemModel ne conserve pas de références internes aux éléments?!? Cela semble assez étrange ... – AkiRoss

+0

Oups, on dirait que j'ai mal interprété le tag 'pyside' et supposé' PyQt' ... – ChristopheD

+0

Eh bien, j'ai pensé à ce problème de toute façon, c'est probablement une question de désallocation/destruction ... Cela explique pourquoi l'utilisation de variables locales au lieu de variables d'objet ne résoudrait pas. Quoi qu'il en soit, ce que je trouve étrange, c'est que les objets doivent être référencés à l'intérieur de StandardItemModel et donc pas détruits ... Mais pourquoi? – AkiRoss