On 25.04.11 10:05:17, Jeremy Sanders wrote: > Hi - I've hit several crashes with Qt's model code with PyQt. > > Can someone clear up the ownership rules for objects given to > QAbstractItemModel.createIndex and accessed with > QModelIndex.internalPointer? > > I tried creating a layer of indirection when using createIndex, e.g. > > class Indirect(object): > def __init__(self, realobj): > self.realobj = realobj > > ... > self.createIndex(row, col, Indirect(realobj)) > > This breaks rather horribly. The objects returned by internalPointer can be > completely random (the model index is however valid), with a different type. > Is because PyQt uses some sort of python id, which is reallocated by python > because the Indirector has no references to it? > > I suppose I will have to hack something like storing a reference to the > Indirect object in the realobj.
I haven't used internalPointer since a long time with PyQt, so things may have changed a lot by now. But back in the earlier days of PyQt the application indeed was required to keep a reference itself to the objects that are passed to the createIndex function that takes a pointer. This matches the C++ behaviour, where the model index also does not take ownership of the object. So it might make more sense use internalIndex with a list and have the list store your Indirect instances... Andreas _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
