[PyQt] Re: problem with QAbstractItemModel

Vicent Mas uvemas at gmail.com
Sat Nov 7 07:40:04 GMT 2009


On 2009-11-06 Baz Walter <bazwal at ftml.net> said:

> ...
> your implementation of QAbstractItemModel.index is going to get called
> *a lot* and in many unforseen ways. 

Yes, but it is a general fact, not something that happens to my particular 
implementation, right?


> i think a more sane implementation
> would be something like this:
> 
>      def index(self, row, column, parent):
>          if self.hasIndex(row, column, parent):
>              branch = self.nodeFromIndex(parent)
>              return self.createIndex(row, column, branch.childAtRow(row))
>          return QModelIndex()
> 
> this fixes your immediate bug, and will probably avoid many others.
> 

I know that my implementation is very rough, but it is intended just for 
testing purposes. Of course your workaround and other similar (like the one 
sent by Linos) fixes the problem, but they leave the main question unanswered:  
why wrong row values are passed to the index method? Is it expected? If it is 
developers are forced to include good sanity code in their index method 
implementation (as you and Linos did), but I've not seen any reference to this 
in the Qt documentation. IMHO the Qt model implementation should not allow 
wrong row values to be passed to the index method. In fact, the example in the 
'Editable Tree Model Example' section of the Qt documentation doesn't check at 
all the validity of the row argument passed to the index method 
implementation.

On the other hand the fact that my script works fine with some Qt/PyQt versions 
but fails with recent versions seems to indicate that there is a bug either in 
the Qt implemention of models or in that PyQt versions.

Vicent

PS: Baz, thanks for your code snippet
::

	Share what you know, learn what you don't

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
Url : http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20091107/fbd1eff3/attachment.bin


More information about the PyQt mailing list