Po vytvorení okna v prvej kapitole, ideme teraz urobiť aplikáciu, ktorá sa korektne ukončí, keď jej to užívateľ prikáže.
Tiež použijeme vzrušujúcejší font než ten defaultný.
/**************************************************************** ** ** Qt tutorial 2 ** ****************************************************************/ #include <qapplication.h> #include <qpushbutton.h> #include <qfont.h> int main( int argc, char **argv ) { QApplication a( argc, argv ); QPushButton quit( "Quit" ); quit.resize( 75, 30 ); quit.setFont( QFont( "Times", 18, QFont::Bold ) ); QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT(quit()) ); a.setMainWidget( &quit ); quit.show(); return a.exec(); }
#include <qfont.h>
Pretože tento program používa QFont, potrebuje vložiť qfont.h. Abstrakcia fontov v Qt je dosť odlišná od horroru poskytovaného X-ami, a nahrávanie a používanie fontov bolo silne optimalizované.
QPushButton quit( "Quit" );
Tentokrát tlačidlo hovorí "Quit" a to je presne to, čo program urobí, keď užívateľ tlačidlo stlačí. To nie je náhoda.
quit.resize( 75, 30 );
Zvolili sme si inú veľkosť tlačidla, keďže nový text je o niečo kratší než "Hello World!". Mohli sme tiež použiť QPushButton::setAutoResize(), alebo dokonca použiť QFontMetrics na nastavenie správnej veľkosti.
quit.setFont( QFont( "Times", 18, QFont::Bold ) );
Tu vyberáme nový font pre tlačidlo, 18-bodový tučný (bold) font z rodiny fontov Times. Všimnite si, že sme to urobili jediným krátkym volaním.
Je tiež možné zmeniť defaultný font celej aplikácie.
QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT(quit()) );
connect() je asi tá najhlavnejšia vymoženosť Qt. Všimnite si, že connect() je statická funkcia triedy QObject. Nemýľte si ju s connect() funkciou socket knižnice.
Tento riadok vytvorí jednosmerné spojenie medzi dvomi Qt objektmi
(priamymi alebo nepriamymi potomkami triedy QObject).
Každý Qt objekt môže mať signály
(na posielanie správ) a
sloty
(na prijímanie správ).
Všetky widgety sú Qt objekty. Sú potomkami triedy QWidget, a teda aj potomkami triedy QObject.
Tu sa signál clicked() objektu quit pripája na slot quit() objektu a, čiže keď užívateľ stlačí tlačidlo, aplikácia skončí.
Kapitola "Signály a sloty" dokumentácie detailne popisuje túto problematiku.
Keď spustíte tento program, uvidíte ešte menšie okno než v prvej kapitole, vyplnené ešte menším tlačidlom.
Vyskúšajte zmeniť veľkosť okna. Stlačte tlačidlo. Hoplá! Zdá sa, že ten connect() spôsobil nejakú zmenu :)
Sú aj iné signály v triede QPushButton, ktoré by sa dali napojiť na quit? Pomôcka: QPushButton dedí väčšinu svojho správania z QButton.
Teraz môžete ísť na kapitolu tri.
[Predchádzajúci tutoriál] [Ďalší tutoriál] [Hlavná stránka tutoriálu]
Copyright © 1998 Troll Tech | Trademarks | Qt version 1.42
|