[Kde-perl] Adding more explicit ambiguous method lookup resolution for PerlQt

Chris Burel chrisburel at gmail.com
Wed Jun 10 07:28:33 CEST 2009


Hey guys,
Sorry for double posting, but I wanted to get Ruby's opinion on this too.

One thing in PerlQt that can be very frustrating is when the bindings
cannot determine which method you intend to call based on the
arguments.  A common example of this happens with the QVariant class,
because it's essentially a union class that has constructors for a
bunch of different data types.  Consider:
my $foo = Qt::Variant(1)
results in

--- Ambiguous method QVariant::QVariant called
Candidates are:
        QVariant::QVariant( uint )
        QVariant::QVariant( int )
        QVariant::QVariant( bool )
Choosing first one...

It's frustrating because the bindings clearly know that the other
method exists, and sometimes you really do want to call the other
method.  But how should you specify which method you really want?

I was thinking that if we already have the method's signature, and it
is unique, why not let the coder specify the exact signature they want
to call?  Something along the lines of
Qt::setSignature( 'QVariant::QVariant( bool )' );
my $foo = Qt::Variant(1);
That way the coder can force the bindings to call the correct method.

It can really help for things like the QSignalMapper, that has these 2
functions:
void setMapping ( QObject * sender, QWidget * widget )
void setMapping ( QObject * sender, QObject * object )
Because of the ambiguity, the coder doesn't know if she/he should
connect to the 'mapped( QWidget * widget )' signal or the 'mapped(
QObject * object )' signal.

Thoughts?

-Chris


More information about the Kde-perl mailing list