[PyKDE] QModelIndex and PyQT

Allen Bierbaum abierbaum at gmail.com
Thu May 25 01:38:36 BST 2006


On 5/24/06, Andreas Pakulat <apaku at gmx.de> wrote:
> On 24.05.06 16:39:28, Allen Bierbaum wrote:
[...]
>
> > make things limp along.   I am currently  funneling all index lookups
> > through a manually maintained map from int id's to python objects.  Is
> > this how other people are also working with QT4 models?
>
> Oh, you already found the "right" way...
>
> > I was surprised that there was no way (that I know of) to attach a
> > python object to a QModelIndex.  It seems from the QT documentation
> > that this is the intent of how indexes are to be used in C++, but
> > there is no corresponding way to do this in Python.
>
> I can imagine that using id's and a dict is much safer. The
> pointer-thing needs a cast and that cast can go wrong. Maybe it's also
> just not possible.
>
> > I think it could be implemented by casting from PyObject* to void*
> > behind the scenes and passing through to the existing
> > internalPointer() C++ interface.  This would make working in Python
> > much easier while still preserving the intent of the QModelIndex
> > interface.
>
> I don't see why using internalPointer is easier than using internalId.
> IMHO it doesn't matter much wether you do
>
> item = static_cast<TreeItem*>(index.internalPointer())
> or
> item = self.obj_dict[index.internalId()]

One reason I am running into in my current code is that once you have
a map of id to objects there is no good way to know when to clear out
the map and thus release the references to the objects.

The other "problem" I have run into (and this is not unique to Python)
is that the QT data model requires bi-directional references in the
tree (parents need to know children, and children need to know
parents).   Many of the tree models that I need to view only have the
parents knowing the children and don't have the opposite direction.

Thanks for the pointers, I will take a fresh look at this code tomorrow.

-Allen

> I guess the latter might also be faster, because there's no need to
> interface with C.
>
> Andreas
>
> --
> You learn to write as if to someone else because NEXT YEAR YOU WILL BE
> "SOMEONE ELSE."
>
> _______________________________________________
> PyKDE mailing list    PyKDE at mats.imk.fraunhofer.de
> http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
>




More information about the PyQt mailing list