vyklad kodu
Petr Pajas
pajas na ufal.ms.mff.cuni.cz
Úterý Září 16 10:02:59 MEST 2003
koala na vju.cz (Ondrej Koala Vacha) writes:
> Dobry den, nize je uveden vzorovy priklad na perlQt. Nejde mi ted o Qt,
> ale o syntaxi:
>
> 1: use strict;
> 2:
> 3: package Button;
> 4: use Qt;
> 5: use Qt::isa qw(Qt::PushButton);
> 6: use Qt::attributes qw(itsTime);
> 7: use Qt::slots
> 8: wasClicked => [],
> 9: change => ['int', 'int'];
> 10: use Qt::signals
> 11: changeIt => ['int', 'int'];
> 12:
> 13: sub NEW
> 14: {
> 15: shift->SUPER::NEW(@_[0..2]);
> 16: itsTime = Qt::Time;
Podivej se na to, co dela
use Qt::attributes qw(itsTime);
Nainstaluje lvalue funkci itsTime. To by se primo v perlu dalo udelat
nejak takto:
sub itsTime() : lvalue {
return \$__itsTime;
}
nicmene to asi funguje jen v novych verzich perlu, viz man attributes,
/lvalue:
lvalue
Indicates that the referenced subroutine is a valid lvalue and can
be assigned to. The subroutine must return a modifiable value such
as a scalar variable, as described in perlsub.
Qt nicmene zavadi attributes pomoci nasledujiciho XS kodu v Qt.xs:
installattribute(package, name)
char *package
char *name
CODE:
if(!package || !name) XSRETURN_EMPTY;
char *attr = new char[strlen(package) + strlen(name) + 3];
sprintf(attr, "%s::%s", package, name);
char *file = __FILE__;
// *{ $attr } = sub () : lvalue;
CV *attrsub = newXS(attr, XS_attr, file);
sv_setpv((SV*)attrsub, "");
CvLVALUE_on(attrsub);
delete[] attr;
Je to od autoru perlQt trochu podvod a slo to asi resit i jinak nez
pomoci lvalue funkci (tak, aby vysledek vypadal "perlovstejc"). Chteli
asi usetrit jedno this-> nebo tak neco. Ale coz, hlavne, ze jim to
chodi :-)
> 17: itsTime->start;
> 18: this->connect(this, SIGNAL 'clicked()', SLOT 'wasClicked()');
> 19: this->connect(this, SIGNAL 'changeIt(int,int)',
>SLOT 'change(int,int)');
> 20: }
>
>
> Muze mi nekdo rozebrat, co se deje na radku 16, tedy co je itsTime?
> Pokud je to jasne a mne to nedochazi, tak si dopredu pisu cerny
> bod:(
>
> s diky
> --
> Ondrej Koala Vacha
-- Petr
Další informace o konferenci Perl