[PyQt] Bug in QAbstractItemModel::createIndex()?
Andreas Pakulat
apaku at gmx.de
Thu Apr 5 18:42:42 BST 2007
On 05.04.07 17:19:56, Phil Thompson wrote:
> On Thursday 05 April 2007 3:02 pm, Andreas Pakulat wrote:
> > Well, the problem with internalPointer is that you can't easily check
> > wether the object it carries is valid. With internalId you get an
> > KeyError when trying to index into the dict...
>
> An internal pointer is always valid if you still have a reference to the
> actual data.
Yes, but if you don't have a reference anymore to an object, you can
still access internalPointer() and try to do something with whatever it
returns -> crash. With an internalId you get a nice exception which can
be caught.
> The internal ID would be useful if the value returned by internalId() was the
> same size (ie. an int) as that passed to createIndex().
My Qt4.3 docs say createIndex takes a quint32 now, while internalId()
returns a quint64. Now if thats not strange I don't know what is... I
guess I should report this to TT. Would it be better to have a quint32
or a quint64 here?
> > Uhm, I just tested the following code, maybe this helps in finding the
> > cause. The output here is:
> > -1211419440 3083330668 3083330668
>
> The first number makes no sense. I would expect it to be -1211636628.
I guess -121163... is the negative max of an int in 32bit? Anyway, what
I find weird is that internalPointer == id in this case, while this
obviously doesn't work in real world examples
> You could put printf()s in the SIP generated code to make absolutely sure.
> Look for the function meth_QAbstractItemModel_createIndex(). The only way it
> could be happening is if the convertion to an int raised an exception.
Tried printfs and fprintfs (to stderr), but I don't see anything when
running the python application... sip+PyQt4 is built in debug mode, do I
need to do something else?
Andreas
--
You will receive a legacy which will place you above want.
More information about the PyQt
mailing list