[PyKDE] convertSubClass() -- I introduced a bug :-(

Phil Thompson phil at riverbankcomputing.co.uk
Sun Apr 11 22:01:00 BST 2004


On Sunday 11 April 2004 8:34 pm, dacut at neolinear.com wrote:
> Phil Thompson write:
> > On Wednesday 07 April 2004 9:29 pm, Dave Cuthbert wrote:
> >> Now, the real bug is if class A defines a subclass converter, no other
> >> class derived from A can also define a subclass converter (and expect it
> >> to be called consistently).  A's subclass converter has to be aware of
> >> the entire hierarchy.
> >
> > Can you explain more? Each converter handles a non-overlapping part of
> > the class tree. They are just called until one of them recognises the
> > object as something it knows the specific type of.
>
> Right -- the problem is when the converters *don't* handle a
> non-overlapping part of the tree.  This doesn't happen in the stock PyQt.

Why would overlapping converters (ie. the same class is handled in more than 
one converter) ever be required?

> The reason this has (sort of) happened to us is that we've extended the
> (non-QObject-derived) QCanvasItem classes in C++.  QCanvasItem's subclass
> converter, however, only knows about the types defined by Qt directly.
>
> If subclass converters were allowed to overlap, we could define our own
> converter without modifying the PyQt source directly.  This procedure would
> also introduce probably unacceptable overhead.

You *can* provide your own converter that handles only the new classes you 
have defined. SIP will try *all* convertors based on the same base class 
until one successfully recognises the instance as being of a class that it 
handles.

Phil




More information about the PyQt mailing list