[PyQt] Problem with implementation of dummy (no-op) proxy model

Hans Meine meine at informatik.uni-hamburg.de
Thu Oct 28 15:40:59 BST 2010


Op den Dunnersdag 28 Oktober 2010 Klock 15:08:16 hett Dan Halbert schreven:
> On Thursday, October 28, 2010 8:28am, "Hans Meine" <meine at informatik.uni-
hamburg.de> said:
> > I am about to give up now, but first I want to post my current code
> > again; I added some assertions which show an interesting fact which I
> > have no explanation for:  One assertion fails, since I am getting a
> > QModelIndex of my proxy model in which internalPointer does *not*
> > contain a QModelIndex of the proxied model anymore, but NULL/None.
> 
> There have been some related discussions on the mailing list you might take
> a look at, for instance:
> http://www.riverbankcomputing.com/pipermail/pyqt/2006-July/thread.html#137
> 86. Google [ site:riverbankcomputing.com internalpointer ] to find some
> more.

Thanks.  They're related, and although I could not find a single posting with 
a good explanation, I think I finally understood what's going on.  I will 
explain it in a separate posting in a minute.

> It might also be interesting to rewrite your Python code in the
> corresponding C++ and see if you see similar behavior.

Yes, I would get the exact same behaviour, only that I would already notice 
that I am doing something wrong while coding, since I would not be tempted to 
rely on proper reference counting.

> In my limited use of proxy models, I have not found it useful to store
> QModelIndex objects in the internalPointer().

No, it's not possible.

> Instead I have created some
> "proxy data objects" that reference the actual data model (which is
> Qt-independent).

The crucial part is that these "proxy data object" need to be kept alive.  The 
kind of object does not really matter.

> I subclassed QSortFilterProxyModel since it implemented a
> bunch of stuff I would otherwise have had to reimplement.

I don't think that would help me in any way, and I have had bad experiences 
with deriving from too specialized classes in PyQt.

> I would also note that your proxy model did not implement mapToSource() and
> mapFromSource() as required, though I don't think they would be called in
> the simple example you posted.

That's because I do not derive from QAbstractProxyModel, but just from a 
QAbstractItemModel directly.

Thanks for the additional pointers,
  Hans


More information about the PyQt mailing list