[Kde-perl] PerlQT Canvas Sample?

Ashley Winters jahqueel at yahoo.com
Sat Mar 13 20:59:54 CET 2004


--- Gerhard Stenzel <gerhard.stenzel at vr-web.de> wrote:
> >Small? How about a one-liner?
> Thanks Ashley. Exactly what I was looking for. For the convenience 
> of other beginnners, I added some newlines to make it easier to read:
> 
> #!/usr/bin/perl
> use Qt;
> $a=Qt::Application(\@ARGV); 
> $c = Qt::Canvas 1000,1000; 
> $t = Qt::CanvasText "Howdy", $c; 
> show $t; 
> $cv = Qt::CanvasView $c;
> setMainWidget $a $cv; 
> show $cv; 
> $a->exec
> 
> This works, also for me. Now if I try to do the same thing in
> pqt-designer, it does not work ... I see a mainwindow, a canvasview
> with scrollbars, but no text.
> Obviously, I am making a rather trivial mistake, but fail to spot it.
> 
> I include the init() from pqt-designer:
> 
> sub init
> {
>     my $c = Qt::Canvas(1000,1000);
>     my $t = Qt::CanvasText("Howdy", $c);
>     $t->show();
>     my $cv = Qt::CanvasView($c, this);
>     $cv->setGeometry( Qt::Rect(10, 10, 200,200) );
>     $cv->show();
> }
> 
> Any ideas?

Yeah, you need to make the QCanvas a child object of `this' in order
for PerlQt to not delete it at the end of your init() function. PerlQt
will rescue my() variables from destruction at the end of a function
ONLY if they have a valid ->parent() object.

In that case, you need:

my $c = Qt::Canvas this;   # there's no QCanvas(QObject*,int,int)
$c->resize(1000,1000);     # so you have to resize() instead
...

Your other option is to store the canvas in an attribute instead of a
my() variable.

QCanvasItem objects are also subject to that parent requirement, but
PerlQt is smart enough to check ->canvas() instead of ->parent() on
them, so you shouldn't need to do anything else special for it to work.

Ashley Winters

> 
> Gerhard


__________________________________
Do you Yahoo!?
Yahoo! Mail - More reliable, more storage, less spam
http://mail.yahoo.com


More information about the Kde-perl mailing list