Pagina principala
Informatii
Internationalizarea
pROgrame KDE/Qt
Download
Documentatii
Despre LKR
Contact
Resurse
Harta site-ului

Tutorial programare KDE 3


   Antonio Larrosa
   14 martie 2002

P1: O aplicatie simpla Qt "Hello World"

P1 este una din cele mai simple aplicatii Qt. Tot codul este scris in fisierul main.cpp:


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

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

    QPushButton *hello=new QPushButton("Hello world!", 0);
    hello->resize(100, 30);

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

    a.setMainWidget(hello);
    hello->show();

    return a.exec();
}
main.cpp

Sa vedem ce face fiecare linie.

    QApplication a(argc, argv);

Aceasta bucata de cod creeaza un obiect QApplication care va controla in continuare executia aplicatiei, majoritatea setarilor sistemului si ale aplicatiei etc.

    QPushButton *hello=new QPushButton("Hello world!", 0);
    hello->resize(100, 30);

Codul de mai sus creaza un obiect QPushButon. Acesta este un buton pe care se poate da clic (nu este un buton care are o stare, precum QRadioButton sau QCheckBox). Va avea ca eticheta textul "Hello world!" si fara parinte. Folosind un widget care nu are parinte indica managerului de ferestre sa aiba grija de acest widget ca de o fereastra de sine statatoare pe pe ecran. De obicei aplicatiile au o singura fereastra fara parinte, numita fereastra principala, dar despre asta vom discuta mai tirziu.

Putem sa modificam dimensiunea widget-ului sa aiba 100 de pixeli latime si 30 inaltime.

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

Ca sa intelegem acest cod ar trebui sa avem ceva cunostinte despre tehnologia semnal-slot. Voi incerca sa va explic acum, dar daca nu intelegeti din explicatia mea cititi in documentatia de la Qt: "Introduction to Signals and Slots".

Toate clasele care mostenesc QObject (direct sau indirect -- adica mosteneste o clasa care la rindul ei a mostenit QObject) pot contine semnale si/sau sloturi. Un obiect poate sa emita un semnal atunci cind isi schimba starea (oricare ar fi). De exemplu, cind dati clic pe un QPushButton acesta emite semnalul clicked() sau cind un QScrollBar este defilat el emite semnalul valueChanged(). Pe de alta parte, un slot este o metoda normala a unui obiect, care poate primi semnale.

Un obiect nu trebuie sa stie daca vreun slot este conectat la vreun semnal de-al lui sau invers, poti conecta un singur semnal la mai multe sloturi sau mai multe semnale la un singur slot. Aceasta va da posibilitatea reala de a refolosi componenta in procesul de dezvoltare.

Codul necesar apelarii unui slot, cit si codul care initializeaza metainformatiile despre obiecte, este generat de utilitarul moc. Vom vedea mai tirziu cum sa folosim moc.

Pe scurt, codul de mai sus este folosit sa conecteze semnalul clicked() generat de obiectul hello la slotul quit() al aplicatiei (a) pentru inchide aplicatia.

    a.setMainWidget(hello);
    hello->show();

Codul de mai sus seteaza obiectul hello ca principalul widget al aplicatiei (cel care va inchide aplicatia) si il pune pe ecran.

    return a.exec();

In cele din urma, bucla de evenimente este apelata si de acum utilizatorul primeste controlul aplicatiei. Cind utilizatorul va apasa butonul hello, bucla de evenimente va apela slotul quit() al aplicatiei si bucla va intoarce o valoare care va fi la rindul ei intoarsa catre sistem.

Nu-i asa ca este usor?



Traducere de Bogdan Daniel Vatra. Adaptare de Claudiu Costin.