Quoting Andreas Pakulat <[EMAIL PROTECTED]>:
On 06.01.08 21:13:44, Aaron Digulla wrote:
The root cause is that setModel() doesn't increment the usage counter of
the python class passed in, so Python will GC it if I don't save a
pointer elsewhere.
Thats by purpose. One reason I can think of is that you often want to
use the model elsewhere to insert data or do something with the data and
then you often don't want a QAbstractItemModel instance but your
specific subclass.
I'm talking about preventing the python class which is used as the
model being garbage collected; it doesn't matter from which Qt class
it is derived.
As it is, the class pointer is copied into the view class and then
python frees the memory. That causes spurious display errors and
crashes. No matter how you look at it, that's a bug.
I found another one but I'm not sure it can be fixed: Create a XML
handler which derives from QXmlDefaultHandler and override
startElement() like so:
def __init__(self):
...
self.path = []
def startElement(self, namespaceURI, localName, qName, atts):
self.path.append(qName)
If you use qName later, the memory will have been freed (because Qt
only gives you a read-only copy). Actually, if Qt was reusing that
QString, the value could even change unexpectedly.
The workaround is to use self.path.append(unicode(qName)) to create a
python string but that's error prone.
Regards,
--
Aaron "Optimizer" Digulla a.k.a. Philmann Dark
"It's not the universe that's limited, it's our imagination.
Follow me and I'll show you something beyond the limits."
http://www.pdark.de/
_______________________________________________
PyQt mailing list PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt