[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