Documente Academic
Documente Profesional
Documente Cultură
Qtlab PDF
Qtlab PDF
Introducere în programare cu Qt
1
1. Introducere în programare cu Qt
ceea ce înseamnă că la un semnal poate fi conectat mai multe sloturi, respectiv mai
multe semnale pot fi conectate la un slot.
La emisia unui semnal managerul de evenimente din Qt verifică dacă semnalul are
asociat unul sau mai multe sloturi, şi dacă găseşte astfel de sloturi le va apela fiecare pe
rând. În corpul semnalelor pot fi transmise şi diferite parametrii, astfel se poate realiza
o comunicare asincronă între difeite obiecte din sistem.
Clasa QObject
Clasa QObject este clasa de bază a tuturor claselor din Qt, care sunt incluse în sistemul
signal-slot. Această clasă conţine metainformaţiile necesare pentru identificarea obiec-
telor în timpul rulării. Fără aceste informaţii, managerul de evenimente nu ar putea
găsi obiectul căreia trebuie trimis semnalul.
Toate clasele ce folosesc semnale şi/sau sloturi trebuie moştenite din clasa QObject.
Pentru ca şi clasele moştenite să conţină metainformaţiile necesare, fiecare clasă trebuie
să conţină macro-ul Q_OBJECT declarat la începutul clasei pe o linie separată.
Cea mai importantă funcţie pusă la dispoziţie de QObject este connect, ce permite
conectarea unui semnal emis de un obiect sursă la un slot dintr-un obiect destinaţie:
connect ( const QObject * sender , const char * signal ,
const QObject * receiver , const char * method )
Pointerii sender şi receiver arată către obiecte sursă şi destinaţie iar signal
şi method conţine denumirile semnalului respectiv a slotului. Pentru a genera aceste
denumiri, se pot folosi macro-urile SIGNAL(signalName) respectiv SLOT(slotName).
Clasa QApplication
Clasa QApplication conţine managerul de evenimente, fiecare aplicaţie Qt trebuie să
conţină un obiect şi numai unul de tip QApplication. Aceasta conţine toate informaţiile
despre program şi poate fi accesat de către toate obiectele din program prin intermediul
variabilei globale qApp.
Principala funcţie a clasei este funcţia exec() care porneşte managerul de eveni-
mente. Această funcţie conţine o buclă infinită pentru tratarea mesajelor şi transmi-
terea semnalelor către sloturi, de aceea funcţia trebuie apelată ca şi ultima în funcţia
main(), după toate iniţializările programului.
2
Structura programelor Qt
Clasa QWidget
Clasa QWidget stă la baza tuturor componentelor ce vor fi afişate pe ecran. Pentru a
realiza acest lucru clasa oferă toate informaţiile necesare pentru ocuparea unei regiuni
pe ecran, tratarea mesajelor venite de la utilizator (tastatură şi mouse) şi funcţii ce
permit desenarea pe regiunea rezervată.
Toate componentele din Qt ce se afişează pe ecran moştenesc clasa QWidget. Pentru
a crea componente personalizate, acestea trebuie să implementeze metodele de tratarea
a diferitelor evenimente ce se pot întâlni în sistem: paintEvent, mouseEvent, keyEvent,
etc...
Exemplu de program Qt
Următorul exemplu demonstrează implementarea unei aplicaţii simple Qt:
# include < QApplication >
# include <QLabel >
3
1. Introducere în programare cu Qt
Compilarea programelor Qt
Programele Qt sunt alcătuite pe lângă codurile sursă (.h şi .cpp) din interfeţe utili-
zator (.ui) şi resurse (.qrc). Pentru compilarea acestora din urmă mediul Qt pune
la dispoziţie tool-urile uic şi rcc care vor genera codul sursă aferent interfeţelor şi
resurselor ce trebuie compilate împreună cu restul codului sursă.
Pentru a realiza mecanismul signal-slot, Qt foloseşte multe metainformaţii asociate
claselor Qt, care trebuie la fel convertite în cod sursă pentru a putea fi compilate. Pentru
a realiza acest lucru Qt oferă tool-ul moc (Meta Object Compiler) care va genera codul
sursă din metainformaţiile din sursele programului
Pentru a uşura realizarea acestor paşi necesari compilării, Qt foloseşte sistemul
qmake, care pe baza unor informaţii simple despre fişierele asociate proiectului va genera
un Makefile care are grijă de realizarea tuturor paşilor de compilare. Pentru a folosi
qmake este nevoie de un fişier proiect (.pro) care conţine componentele programului.
Astfel pentru a compila exemplul prezentat anterior este nevoie de un fişier
hello.pro:
TARGET = hello
TEMPLATE = app
SOURCES += main . cpp
Conţinutul fişierului specifică numele executabilului ce va fi generat (TARGET), tipul
executabilului (TEMPLATE) ce poate fi aplicaţie (app) sau bibliotecă (lib) şi fişierele
sursă ce alcătuiesc programul (SOURCES). Alte opţiuni importante includ fişierele header
(HEADERS), resursele (RESOURCES) şi interfeţele utilizator (FORMS).
Pentru a compila programul trebuie lansate comenzile:
> qmake
> make
După compilare aplicaţia poate fi rulată cu comanda
> ./ hello
ceea ce în cazul exemplului prezentat anterior va rezulta în fereastra prezentată pe
figura 1.1.
4
Crearea interfeţelor utilizator
• Widget Box - conţine componentele principale din Qt, ce pot fi puse pe interfaţa
creată prin drag&drop
Principala componentă din QtDesigner este interfaţa creată în sine, pe care se pot
depune componentele şi oferă o vizualizare a acestei chiar în forma cum va apărea pe
ecran programul final.
5
1. Introducere în programare cu Qt
Interfeţele generate sunt stocate în fişiere de tip XML cu extensia .ui, şi care pot
fi convertite în cod C++ cu ajutorul utilitarului uic. Pentru ca interfaţa să fie inclusă
în proiectul qmake aceasta trebuie adăugată la secţiunea FORMS.