Qt logo


Kapitola 2: Volajme to Quit


Screenshot of tutoriálu č. two

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();
}

Prechádzka riadok po riadku

    #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 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.

Správanie

Keď spustíte tento program, uvidíte ešte menšie okno než v prvej kapitole, vyplnené ešte menším tlačidlom.

Cvičenia

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 TechTrademarks
Qt version 1.42