Re: Why isn't this easy? implementing File->New
Ashley Winters <[email protected]> Tue, 1 Aug 2006 20:51:53 -0700 (PDT)
| Newsgroups | gmane.comp.kde.devel.perl |
|---|---|
| Message-ID | <[email protected]> |
--- darrik <[email protected]> wrote: > > I've found this works, and I'm thinking it has to do with variables > going out of scope, automagic destructors, and perl garbage > collecting. > > sub processFileMenu { > if ($option==FILENEW) { > our $newwin->{this()}=MyView(); > $newwin->{this()}->show(); > } > } Yes, the garbage collector got him. As a general policy, when you create widgets in Perl, you should treat them the way C++ Qt does -- as children of your main window, with the parent responsible for their ultimate destruction, if they don't close themselves first. The usual incantation should be: package MyView; use strict; use Qt; use Qt::isa qw(Qt::Widget); sub NEW { my $class = shift; my $parent = shift; $class->SUPER::NEW($parent); # initialize yourself here } The garbage collector won't delete widgets which have a ->parent(), and you should probably pass 'this' as the parent window. use strict; use Qt; # use Qt in EVERY package! It declares 'this', and does other use-strict-happy things use MyView; sub processFileMenu { if ($option==FILENEW) { MyView(this)->show; } } Cheers, Ashley Winters __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com