Home

Klasy - Adnotacje - Drzewo - Funkcje - Powrót - Struktura

Rozdział 5: Układanie klocków

Screenshot of tutorial five

Ten przykład pokazuje jak pokazać i połączyć kilka widgetów przy użyciu sygnałów i slotów oraz jak obsługiwać zdarzenia.

/****************************************************************
**
** Qt tutorial 5
**
****************************************************************/

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

#include <qvbox.h>

class MyWidget : public QVBox
{
public:
    MyWidget( QWidget *parent=0, const char *name=0 );
};

MyWidget::MyWidget( QWidget *parent, const char *name )
        : QVBox( parent, name )
{
    QPushButton *quit = new QPushButton( "Quit", this, "quit" );
    quit->setFont( QFont( "Times", 18, QFont::Bold ) );

    connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );

    QLCDNumber *lcd  = new QLCDNumber( 2, this, "lcd" );

    QSlider * slider = new QSlider( Horizontal, this, "slider" );
    slider->setRange( 0, 99 );
    slider->setValue( 0 );

    connect( slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)) );
}

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

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

Analiza kodu linia po linii

    #include <qapplication.h>
    #include <qpushbutton.h>
    #include <qslider.h>
    #include <qlcdnumber.h>
    #include <qfont.h>
    
    #include <qvbox.h>
Mamy trzy nowe pliki nagłówkowe. qslider.h oraz qlcdnumber.h ponieważ użyjemy użyjemy dwóch nowych widgetów; QSlider oraz QLCDNumber. qvbox.h ponieważ użyjemy automatycznej obsługi rozmieszczenia z Qt.
    class MyWidget : public QVBox
    {
    public:
        MyWidget( QWidget *parent=0, const char *name=0 );
    };
    MyWidget::MyWidget( QWidget *parent, const char *name )
            : QVBox( parent, name )
    {
MyWidget jest teraz wyprowadzany z QVBox miast z QWidget. W ten sposób użyjemy rozmieszczenia QVBox (któwy umieszcza pionow wszystkie swoje dzieci w swoim środku). Zmiana wielkości jest teraz obsługiwana automatycznie przez QBVox a więc także i przez MyWidget.
        QLCDNumber *lcd  = new QLCDNumber( 2, this, "lcd" );
lcd jest numerem QLCDNumber, widgetem który pokazuje liczby w stylu wyświetlacza LCD. W tym przypadku wyświetlone zostaną dwe cyfry, dziecko tego oraz zostanie nazwany "lcd".
        QSlider * slider = new QSlider( Horizontal, this, "slider" );
        slider->setRange( 0, 99 );
        slider->setValue( 0 );
QSlider to klasyczny suwak; widget dzięki któremu użytkownik może coś przeciągnąć tak aby zmienić wartość liczby rzeczywstej w pewnym przedziale. Tutaj utworzymy suwak poziomy, ustawimy zakres na od  0 do 99 (zawierająco patrz opis QSlider::setRange()) o wartości domyślnej 0.
        connect( slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)) );
Tutaj użyjemy mechanizmu sygnałów i slotów tak aby połączyc wartość valueChanged() suwaka sygnałem do slotu wyświetlacza LCD display().

Jeżeli tylko wartość wyświetlacza ulegnie zmianie, ogłosi swoją nową wartość przez emisję sygnału valueChanged(). Ponieważ ten sygnał jest podłącziny so slotu wyświetlacza LCD display(), slot jest wywoływany kiedy nadawany jest sygnał. Żadnen z objektów nie ma o drugim pojęcia. To jest podstawa programowania.

Z drugiej strony sloty są normalnymi członkowskimi funkcjami C++ i spełniają standardowe prawa dostępu C++.

Zachowanie

Wyświetlacz LCD błyskawicznie reaguje na to co zrobisz z suwakiem, obsługuje także rozszerzanie. Zwróć uwagą jak cyfry LCD zmieniają się wraz ze zmianą okna (bo moga), lecz inne zostają niezmienione (gdyż inaczej wyglądałoby to głupio).

Ćwiczenia

Spróbuj zmienić LCD tak aby dodać więcej cyfr lub zmień tryb.  Możesz nawet dodać cztery przyciski tak aby ustawić bazę liczb.

Możesz także zmienić zakres suwaka.

Być może lepiej by było gdybyś użył QSpinBox jako suwak ?

Spróbuj zakończyć aplikację gdy przepełni się bufor liczb.
Możesz teraz przejść do rozdziału szóstego.

[Poprzedni tutorial] [Następny tutorial] [Główna strona tutoriala]



 
Copyright (c) 2000 Troll Tech Znaki towarowe
Wersja Qt 2.1.0