[Kde-perl] How does shift->SUPER::NEW works?

Germain Garand germain at ebooksfrance.org
Thu May 27 03:49:25 CEST 2004


Le Jeudi 27 Mai 2004 01:14, Rafael Beccar a écrit :
> Hi,
>
> I'm having a hard time trying to properly use the constructor built by
> PerlQt Designer.
>
> I think my problem is that I don't understand how the following line
> works:
> shift->SUPER::NEW(@_[0..3]);
>

this line calls the constructor of the superclass.
@_[0..x] passes only the number of arguments the superclass's constructor 
requires.

e.g:
given a package foo, that isa Qt::Widget

   foo( undef, "widget", 0, "some other arg" )

would eventually call

   foo->NEW( undef, "widget", 0, "some other arg" )

that is to say:

  foo::NEW( "foo", "undef, "widget", 0, "some other arg" )

and assuming foo::NEW contains:

   shift->SUPER::NEW(@_[0..2])

would thus call
 
   foo->SUPER::NEW( undef, "widget", 0 )

i.e:

   foo->Qt::Widget::NEW( undef, "widget", 0 )

that will build an instance of a Qt::Widget, setup the 'this' pointer and 
Qt::attributes accessors.

You don't need to return 'this' (i.e $self) at the end of the constructor: 
PerlQt takes care of that.

> What does this line do with the parameters passed to the constructor and
> how do I get them once the line was executed?

the @_ array isn't emptied in the process, so after the call, you still have
all the arguments at hand.

>
> If do this:
>
> my $arg = $_[1];
> shift->SUPER::NEW(@_[0..3]);
>
> I get the parameter I want in the $arg variable, but I think this is not
> the best way to do it as the first line is removed every time I run
> puic.

instead of hand-editing the puic generated code, you should consider 
subclassing it.
see: 
http://perlqt.sourceforge.net/dist/current/doc/en/index.html#rad_prototyping_with_qt_designer_and_puic
=> "Subclassing your GUI"

Greetings,
Germain



More information about the Kde-perl mailing list