[Kde-perl] Overloading of Qt::ToolTip::maybeTip doesn't work

Richard Dale Richard_Dale at tipitina.demon.co.uk
Thu Oct 28 02:22:03 CEST 2004


On Wednesday 27 October 2004 22:48, Ole Christensen wrote:
> Hi,
>
> I am trying to implement a dynamic tooltip. The problem is that
> overloading Qt::ToolTip::maybeTip does not work for me. I already have
> reimplemented virtual functions in perl, but for some reason it does not
> work for maybeTip. QToolTip is not a subclass of QObject. Does that matter?
>
> When I switch on debugging of virtual functions I get:
>
> virtual 0x8772ea0->QToolTip::maybeTip() called
> Cannot find object for virtual method
>
> I am using
> PerlQt 3.008
> Qt 3.3.3
> perl 5.8.2
I had the same problem as this with qtruby. Here is the entry from the qtruby 
ChangeLog:

 * If a class doesn't have a virtual destructor, then no mapping was being
   kept from the C++ instance to the corresponding ruby value. If the class
   had virtual method callbacks, this meant that the ruby instance couldn't
   be found, and the callback couldn't be made.

 * Hence, the Qt::ToolTip callback in examples/qt-examples/tooltip didn't
   work, as that class doesn't have a virtual destructor.

For PerlQt, you would need to remove this test from the mapObject() function 
in Qt.xs:

    if(!c.hasVirtual() ) {
 XSRETURN_EMPTY;
    }

void
mapObject(obj)
    SV *obj
    CODE:
    smokeperl_object *o = sv_obj_info(obj);
    if(!o)
        XSRETURN_EMPTY;
    SmokeClass c( o->smoke, o->classId );
//    if(!c.hasVirtual() ) {
// XSRETURN_EMPTY;
//    }
    mapPointer(obj, o, pointer_map, o->classId, 0);

So that a mapping of the pointer from a C++ instance to a perl instance is 
always kept.

-- Richard


More information about the Kde-perl mailing list