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?
|