Qt logo


Kapitola 3: Rodinné hodnoty


Screenshot of tutoriálu č. three

Tento príklad ukazuje ako vytvoriť rodičovské a dcérske widgety.

Necháme to zatiaľ jednoduché a použijeme len jeden rodičovský (hm, rodinné hodnoty?) a jeden dcérsky objekt.

/****************************************************************
**
** Qt tutorial 3
**
****************************************************************/

#include <qapplication.h>
#include <qpushbutton.h>
#include <qfont.h>

int main( int argc, char **argv )
{
    QApplication a( argc, argv );

    QWidget w;
    w.resize( 200, 120 );

    QPushButton quit( "Quit", &w );
    quit.move( 62, 40 );
    quit.resize( 75, 30 );
    quit.setFont( QFont( "Times", 18, QFont::Bold ) );

    QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT(quit()) );

    a.setMainWidget( &w );
    w.show();
    return a.exec();
}

Prechádzka riadok po riadku

        QWidget w;

Tu jednoducho vytvoríme widget. Všimnite si, že nemusíme vkladať qwidget.h, pretože máme vložený qpushbutton.h a QPushButton je podtrieda triedy QWidget (viď hierarchiu tried).

QWidget nespracúva žiadne udalosti, len sa jednoducho zobrazí použijúc svoju farbu pozadia a popis (caption).

        w.resize( 200, 120 );

Nastavíme šírku na 200 a výšku na 120 pixelov.

        QPushButton quit( "Quit", &w );

Narodilo sa dieťa.

Tento QPushButton je vytvorený aj s textom, "Quit", aj s rodičovským objektom, w. Dcérsky objekt je vždy na povrchu rodičovského. Pri zobrazení je orezaný v rámci rodičových hraníc.

        quit.move( 62, 40 );

Dcérsky objekt je posunutý na pozíciu 62,40, relatívne vzhľadom na ľavý horný roh rodičovského objektu (bez rámu okna). Súradnice sú obvyklé pre vizuálny display, x rastie vpravo, y nadol.

        w.show();

Keď sa widget zobrazuje, volá show() pre všetky svoje dcéry (okrem tých, pre ktoré ste explicitne urobili hide()).

Správanie

Všimnite si, že ak zmeníte veľkosť widgetu, veľkosť tlačidla sa na rozdiel od prvých dvoch príkladov nezmení. Je to preto, že hlavný widget je QWidget, ktorý nereaguje na zmenu veľkosti.

Ak používate X11, môžete vidieť ten istý efekt, ak spustíte program s voľbou -geometry.

Cvičenia

Skúste zmeniť argumenty funkcií quit.move() a/alebo quit.resize(). Čo sa stane, ak quit bude čiastočne "mimo" w?

Pre užívateľov X11:

Tiež skúste presunúť w.resize() za quit.move/resize, a za a.setMainWidget(). Funguje ešte -geometry?

Teraz môžete ísť na kapitolu štyri.

[Predchádzajúci tutoriál] [Ďalší tutoriál] [Hlavná stránka tutoriálu]


Copyright © 1998 Troll TechTrademarks
Qt version 1.42