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

Ole Christensen Ole.Christensen at web.de
Thu Oct 28 22:14:52 CEST 2004


Richard,

unfortunately the patch you suggested does not fix the problem. 
Everything unchanged. Find the corresponding output below. Note the "-- 
Ole" ;-) So the right lib actually gets used. The mapObject function 
obviously does not get called at all in this context. I put an fprintf 
there which is not reached.

virtual 0x8746220->QToolTip::maybeTip() called
Cannot find object for virtual method -- Ole

I applied the patch on a fresh cvs export from sourceforge. Is there 
anything else I could do to track down the problem? Thanks in any case 
for your help.


Regards,

Ole.


Richard Dale wrote:
> 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
> _______________________________________________
> Kde-perl mailing list
> Kde-perl at kde.org
> https://mail.kde.org/mailman/listinfo/kde-perl


More information about the Kde-perl mailing list