Sunteți pe pagina 1din 6

Lucrarea 1

Introducere n programare cu Qt
Qt este o suit de dezvoltare pentru aplicaii vizuale, ce permite realizarea rapid i uoare a acestor aplicaii indiferent de platforma folosit. Dezvoltat n limbajul C++, complet orientat pe obiecte, Qt pune la dispoziie o multitudine de clase, ce ofer o interfa de programare (API) comun pentru platformele Win32, X11, MacOSX, PocketPC, Embedded Linux i Symbian. Aceasta permite portarea uoar a aplicaiilor vizuale pentru diferite platforme.

1.1. Managementul de evenimente


Aplicaiile vizuale sunt caracterizate prin faptul c permit aarea diferitelor componente pe ecran, care pot interaciona cu utilizatorul. Aceast interaciune este realizat prin intermediul unor mesaje transmise de ctre sistemul de operare sau alte componente din sistem. De exemplu apsarea butonului de mouse asupra componentei va rezulta n transmiterea unui mesaj corespunztor la component, care la urma acesteia va executa rutina asociat apsrii butonului. Pentru tratarea acestor mesaje ecare aplicaie trebuie s implementeze o bucl de mesaje, o bucl innit n care sunt recepionate mesajele i care conine identicarea ecrui mesaj i apelarea funciilor asociate cu acestea. Implementrile acestor bucle de mesaje depind de platforma folosit. Pentru a oferi o interfa independent de platform, Qt ofer un sistem special pentru tratarea mesajelor, care este tradus intern n forma dependent de platform. Acest sistem se numete mecanismul signal-slot, i este bazat pe nite metainformaii asociate obiectelor, prin care membrii acestora pot denii ca semnale (signal) i sloturi. Fiecare obiect din Qt poate conine membrii de tip signal, care pot emise n orice moment i care va tratat de managerul de eveniment intern. De asemenea obiectele pot avea funcii speciale marcate ca sloturi, care au rolul de a trata semnalele trimise ctre obiect. Corespondena dintre semnale i sloturi este stocat ntr-o tabel intern n care pot adugate conexiuni n mod dinamic de ctre obiectele aferente. ntre semnale i sloturi pot exista conexiuni de tip multe-la-multe, 1

1. Introducere n programare cu Qt ceea ce nseamn c la un semnal poate conectat mai multe sloturi, respectiv mai multe semnale pot conectate la un slot. La emisia unui semnal managerul de evenimente din Qt veric dac semnalul are asociat unul sau mai multe sloturi, i dac gsete astfel de sloturi le va apela ecare pe rnd. n corpul semnalelor pot transmise i diferite parametrii, astfel se poate realiza o comunicare asincron ntre difeite obiecte din sistem.

1.2.

Structura programelor Qt

Programele Qt sunt bazate pe nite clase de baz, ce vor folosite (e direct e prin subclase) n toate aplicaiile.

Clasa QObject
Clasa QObject este clasa de baz a tuturor claselor din Qt, care sunt incluse n sistemul signal-slot. Aceast clas conine metainformaiile necesare pentru identicarea obiectelor n timpul rulrii. Fr aceste informaii, managerul de evenimente nu ar putea gsi obiectul creia trebuie trimis semnalul. Toate clasele ce folosesc semnale i/sau sloturi trebuie motenite din clasa QObject. Pentru ca i clasele motenite s conin metainformaiile necesare, ecare clas trebuie s conin macro-ul Q_OBJECT declarat la nceputul clasei pe o linie separat. Cea mai important funcie pus la dispoziie de QObject este connect, ce permite conectarea unui semnal emis de un obiect surs la un slot dintr-un obiect destinaie: connect ( const QObject * sender , const char * signal , const QObject * receiver , const char * method ) Pointerii sender i receiver arat ctre obiecte surs i destinaie iar signal i method conine denumirile semnalului respectiv a slotului. Pentru a genera aceste denumiri, se pot folosi macro-urile SIGNAL(signalName) respectiv SLOT(slotName).

Clasa QApplication
Clasa QApplication conine managerul de evenimente, ecare aplicaie Qt trebuie s conin un obiect i numai unul de tip QApplication. Aceasta conine toate informaiile despre program i poate accesat de ctre toate obiectele din program prin intermediul variabilei globale qApp. Principala funcie a clasei este funcia exec() care pornete managerul de evenimente. Aceast funcie conine o bucl innit pentru tratarea mesajelor i transmiterea semnalelor ctre sloturi, de aceea funcia trebuie apelat ca i ultima n funcia main(), dup toate iniializrile programului.

Structura programelor Qt

Clasa QWidget
Clasa QWidget st la baza tuturor componentelor ce vor aate pe ecran. Pentru a realiza acest lucru clasa ofer toate informaiile necesare pentru ocuparea unei regiuni pe ecran, tratarea mesajelor venite de la utilizator (tastatur i mouse) i funcii ce permit desenarea pe regiunea rezervat. Toate componentele din Qt ce se aeaz pe ecran motenesc clasa QWidget. Pentru a crea componente personalizate, acestea trebuie s implementeze metodele de tratarea a diferitelor evenimente ce se pot ntlni n sistem: paintEvent, mouseEvent, keyEvent, etc...

Exemplu de program Qt
Urmtorul exemplu demonstreaz implementarea unei aplicaii simple Qt: # include < QApplication > # include <QLabel > int main (int argc , char * argv []) { QApplication a(argc , argv ); QLabel label ; label . setText (" <p style ='font - size : 52 pt; color : #336633; background - color : # CCFFCC '> Hello world </p>"); label . show (); return a. exec (); } Programul ncepe cu instanierea obiectului de baz QApplication, care va porni managerul de evenimente prin metoda exec(). Aceast metod conine bucla care preia toate semnalele emise de obiectele din program i transmite ctre sloturile corespunztoare. Bucla continu pn cnd obiectul QApplication n sine primete un semnal quit() din interior sau exterior, sau este apelat funcia exit(). n mod implicit aplicaia se va nchide i n cazul n care este emis semnalul lastWindowClosed(), ceea ce nseamn c toate ferestrele vizibile a programului au fost nchise. nainte de pornirea managerului de evenimente trebuie creat i cel puin o fereastr vizibil (altfel aplicaia s-ar nchide imediat). n exemplul dat este creat un obiect de tip QLabel care permite aarea unui text sau a unei imagini pe fereastra asociat. Textul poate s e un text simplu sau chiar un text formatat de tip RTF sau HTML. Qt interpreteaz complet formatul HTML inclusiv i stilurile CSS, aa cum se poate vedea n exemplul dat. Funcia show() permite aarea ferestrei pe ecran astfel asigurnd existena unei ferestre vizibile. 3

1. Introducere n programare cu Qt

Compilarea programelor Qt
Programele Qt sunt alctuite pe lng codurile surs (.h i .cpp) din interfee utilizator (.ui) i resurse (.qrc). Pentru compilarea acestora din urm mediul Qt pune la dispoziie tool-urile uic i rcc care vor genera codul surs aferent interfeelor i resurselor ce trebuie compilate mpreun cu restul codului surs. Pentru a realiza mecanismul signal-slot, Qt folosete multe metainformaii asociate claselor Qt, care trebuie la fel convertite n cod surs pentru a putea compilate. Pentru a realiza acest lucru Qt ofer tool-ul moc (Meta Object Compiler) care va genera codul surs din metainformaiile din sursele programului Pentru a uura realizarea acestor pai necesari compilrii, Qt folosete sistemul qmake, care pe baza unor informaii simple despre ierele asociate proiectului va genera un Makefile care are grij de realizarea tuturor pailor de compilare. Pentru a folosi qmake este nevoie de un ier proiect (.pro) care conine componentele programului. Astfel pentru a compila exemplul prezentat anterior este nevoie de un ier hello.pro: TARGET = hello TEMPLATE = app SOURCES += main . cpp Coninutul ierului specic numele executabilului ce va generat (TARGET), tipul executabilului (TEMPLATE) ce poate aplicaie (app) sau bibliotec (lib) i ierele surs ce alctuiesc programul (SOURCES). Alte opiuni importante includ ierele header (HEADERS), resursele (RESOURCES) i interfeele utilizator (FORMS). Pentru a compila programul trebuie lansate comenzile: > qmake > make Dup compilare aplicaia poate rulat cu comanda > ./ hello ceea ce n cazul exemplului prezentat anterior va rezulta n fereastra prezentat pe gura 1.1.

Figura 1.1. Aplicaia hello

Crearea interfeelor utilizator

1.3.

Crearea interfeelor utilizator

Interfeele utilizator pot create foarte uor prin intermediul programului QtDesigner. Aceasta este un mediu interactiv care permite construirea interfeelor din diferite componente standard, aranjarea acestora, congurarea componentelor i a comportamentelor acestora. QtDesigner (g. 1.2) este un program alctuit din mai multe panouri: Widget Box - conine componentele principale din Qt, ce pot puse pe interfaa creat prin drag&drop Object Inspector - aeaz o structur arborescent a tuturor componentelor folosite Property Editor - conine lista tuturor proprietilor compoentei selectate, ce pot modicate n timpul proiectrii un panou ce conine editorul de conexiuni (ntre semnale i sloturi), editorul de aciuni (folosite pentru meniuri i toolbar-uri) i editorul de resurse (folosite pentru adugarea resurselor de tip imagini sau text) Principala component din QtDesigner este interfaa creat n sine, pe care se pot depune componentele i ofer o vizualizare a acestei chiar n forma cum va aprea pe ecran programul nal.

Figura 1.2. QtDesigner n lucru

1. Introducere n programare cu Qt Interfeele generate sunt stocate n iere de tip XML cu extensia .ui, i care pot convertite n cod C++ cu ajutorul utilitarului uic. Pentru ca interfaa s e inclus n proiectul qmake aceasta trebuie adugat la seciunea FORMS.