[PyKDE] sip & overloaded methods

Greg Green gregory.p.green at boeing.com
Mon Apr 30 17:49:48 BST 2001

> Greg Green wrote:
> > 
> > Hello,
> > 
> > I am trying to use the QWMatrix class in Qt. It has several map
> > methods taking different arguments. Looking at the source, all of
> > methods are defined, but it appears in practice that only the
> > map(int, int, int*, int*) method is called which is unfortunate
as i
> > have double values that are getting rounded off.
> > 
> > Looking at siplib, I don't see how these overloaded methods could
> > called. I don't see any magic methods to dispatch on the correct
> > method based on the arguments. It appears that the names must be
> > changed on these overloaded methods so that the correct ones can
> > called.
> > 
> > Or am I missing something?
> This is a long standing bug - not resolved because I haven't come
to a
> conclusion about what the most "correct" fix is.
> The problem is that Python can convert between numeric types quite
> happily, so it can't distinguish between types as well as C++ can.
> knows that it can convert doubles to ints so it converts the
doubles to
> ints and calls the int version of map rather than not converting the
> doubles and calling the double version of map.
> Actually, I know the proper answer - sip should realise the
> amiguity and apply more intelligent tests on the arguments. In the
> meantime (if you are happy to regenerate the C++ code from the .sip
> files) the easiest thing to do is to use something like
> /PyName=map_double/ to the map(double,double...) entry in
> If you want to pass floating point values you call
> QWmatrix.map_double(), call QWMatrix.map() if you want to pass ints.

I had already implemented this solution of modifying the method
names. So I'll go with it for now. Makes the code less portable
however. It means I have to provide the PyQt module even if the user
already has it.


Greg Green
Advanced Design Systems
Math & Computing Technology
(425) 865-2790

More information about the PyQt mailing list