Vom începe să programeze în qt

salut Notepad

În primul exemplu, vom crea o fereastră simplă pentru editare de text. Acesta este programul cel mai elementar GUI Qt.

Să ne gândim în detaliu fiecare linie de cod. În primele două, includem fișierele antet și clasa QApplication QTextEdit. care sunt necesare pentru acest exemplu. Fiecare clasă în Qt corespunde unui fișier de antet cu același nume.

Linia 6 creează o clasă obiect QApplication. care controlează resursele de bază necesare pentru a rula orice program cu o interfață grafică Qt. El trebuie să treacă argumente argv și args funcția principală (). deoarece Qt folosește unii parametri de linie de comandă să fie transmise atunci când începe programul.

În a opta linie de cod creează o clasă de obiecte QTextEdit. QTextEdit - un element vizual al interfeței grafice. În Qt folosesc anumite widget-uri - cum ar fi barele de defilare, etichete și butoane radio. Widgetul poate fi un recipient pentru depozitarea altor widget-uri. Un bun exemplu este caseta de dialog principal.

În linia 9, fereastra de editare de text este afișat în cadrul principal al programului. Deoarece widget-urile pot acționa ca containere (în instanță a clasei sunt benzi QMainWindow bara de instrumente, meniuri, bara de stare, și alte câteva widget-uri), putem afișa doar un singur widget în fereastra programului nostru. În mod implicit, widget-uri nu sunt vizibile. Funcția Show () este folosit pentru a le afișa.

Linia 11 creează un obiect QApplication. care generează un ciclu de evenimente în cadrul cererii. Evenimentele sunt generate și transmise la prelucrarea de widget-uri. Exemple de evenimente pot include clicuri de mouse, intrarile de la tastatura, etc. Când introduceți text în fereastra de QTextEdit widgetului de editare, intrarile de la tastatura sunt prelucrate prin intermediul widget-ului, și textul de intrare apare atunci când tastați.

Pentru a rula programul, deschideți un prompt de comandă și du-te la directorul cu fișierul Cpp al programului. Executați următoarele comenzi shell-shell, pentru a alcătui un exemplu.

După finalizarea cu succes a comenzii anterioare, programul compilat va fi disponibil în directorul curent (în Windows, puteți utiliza nAsigurați în loc de a face fișiere executabile vor fi plasate în depanare sau eliberarea directoare, care vor fi create de marca qmake - .. Este un utilitar care creează fișiere de configurare intervalului QT proiect, în cazul în care este trecut un argument-proiect. După ce creați fișierul de configurare (.pro), qmake genereaza Makefile, folosit de marca de utilitate pentru a construi cererea. Mai târziu, ne vom uita la procesul de a scrie propriile fișiere .pro.

Adăugarea Buton de ieșire pentru

În proiect viața reală, de obicei mai mult de un widget. Astăzi vom adăuga butonul de mai jos QPushButton editare câmp. Făcând clic pe ea, programul se va încheia.

Mai întâi conectați fișier antet QtGui. Acesta conține toate clasele din Qt GUI.

Linia 10 se aplică semnale și sloturi mecanism. pentru a închide programul după ce faceți clic pe butonul Ieșire. Slot - o funcție care poate fi invocată în timpul rulării. Semnal - o funcție, sloturile funcționale, care erau cu el prin QObject :: conecta.

quit () - slot de clasa QApplication. de încheiere a cererii. a făcut clic () - semnal care transmite butonul QPushButton apăsat. Funcția static QObject :: connect leagă un anumit spațiu și semnal. SIGNAL () și SLOT () - macro-uri care acceptă semnale de semnătură și sloturi, pentru conectarea lor unele cu altele. De asemenea, funcția de conectare (), trebuie să treacă un pointer la obiectul care va primi și trimite semnale.

Linia 12 creează o clasă QVBoxLayout obiect. După cum sa menționat deja, widget-uri pot conține alte widget-uri. Puteți specifica poziția și dimensiunea de widget-uri încorporate direct, dar de obicei este folosit pentru straturi (machete). Layer gestionează limitele widget-uri încorporate. De exemplu, QVBoxLayout obiect localizează widget într-o coloană verticală unică.

În liniile 13 și 14, vom adăuga un câmp pentru editare butonul de ieșire de text și la stratul de aspect. este setat linia principală 17 pentru întregul strat de aplicație.

moștenire QWidget

Atunci când utilizatorul dorește să închidă aplicația, este posibil pentru a afișa o fereastră pop-up în care programul cere confirmarea acestei acțiuni. În acest exemplu, vom crea un moștenitor QWidget și adăugați un slot care va fi legat de butonul de eliberare.

Q_OBJECT macro declară clasa noastră ca QObject. Ar trebui să fie plasat la începutul definiției de clasă. QObject adaugă mai multe caracteristici îmbunătățite la obicei clasa C ++. De exemplu, clasele și nume de spații pot fi interogate în timpul rulării. De asemenea, putem învăța tipurile de parametri slot și să-l sun.

este declarat Linia 13 pentru a iesi fantă (). Ulterior, vom adăuga slotul la semnal.

In exemplele anterioare, crearea de grafice și fante de fixare realizate în funcție principală (). Acum vom folosi constructorul Notepad lui.

După cum se poate observa din definiția de clasă, folosim pointeri la obiecte și TextEdit quitButton. Pentru obiectele QObject. aproape întotdeauna să aloce rațional de memorie pe heap în loc de a le copia.

Noi folosim funcția tr () pentru a procesa toate rândurile care sunt vizibile pentru utilizator. Această caracteristică este utilă atunci când o aplicație trebuie să fie traduse în mai multe limbi. Nu vom intra în detalii, dar puteți găsi informații în descrierea Qt Linguist Library.

Crearea unui fișier .pro

Anterior, am folosit comanda qmake pentru a-proiect crea un fișier .pro. În exemplul următor, vom crea manual fișierul.

Acum, pentru a construi programe pe Qt, vor fi folosite următoarele comenzi.

Utilizarea QMainWindow

În multe aplicații, este convenabil să se utilizeze QMainWindow - strat, pe care o puteți adăuga meniuri contextuale, widget-uri încorporate, bare de instrumente și bara de stare. În QMainWindow există o zonă centrală unde puteți adăuga orice widget-uri pentru copii. În acest exemplu, vom posta pentru a edita câmpul de text.

Am creat două sloturi suplimentare - deschise () și de a salva (). Acestea vor fi deschise și salvați documentul. Un exemplu de implementare a acestora vor fi prezentate mai târziu.

Foarte des, unul și același slot este folosit simultan de mai multe widget-uri. De exemplu, elementele de meniu și bara de instrumente butonul corespunzător. Pentru a simplifica acest proces, în Qt acolo clasa QAction. care pot fi transmise la mai multe widget-uri și atașați la slot. De exemplu, QMenu și QToolBar pot crea elemente de meniu folosind un singur QAction de acțiune. În curând veți vedea cum facilitează procesul de dezvoltare.

În primul rând, vom folosi Notepad clasa de constructor pentru a crea o interfață grafică de utilizator.

Când creați o acțiune setează textul afișat în widget-ul, care va fi adăugat la aceste acțiuni (în cazul nostru, elementele de meniu). Dacă avem nevoie să adăugați butoane pentru aceste acțiuni în bara de instrumente, putem trece pe pictograma pentru fiecare acțiune.

Atunci când un utilizator face clic pe un element de meniu, acțiunea a trimis un semnal și solicită slotul corespunzător.

Salvarea și deschiderea

În acest exemplu, vom implementa funcționalitatea sloturi deschise () și de a salva (). care au fost adăugate în exemplul anterior.

„> Primul pas -. Aceasta este o solicitare din partea utilizatorului numele de fișier pentru a deschide cu Qt include clasa QFileDialog - o casetă de dialog în care utilizatorul poate selecta un fișier static getOpenFileName funcția () se deschide o fereastră modal pentru a selecta fișierul și returnează calea către fișierul selectat .. În cazul în care utilizatorul a anulat operațiunea, funcția returnează un șir gol.

După ce numele fișierului a fost primit, vom încerca să-l deschidă folosind funcția deschisă (). Se returnează un boolean true dacă succes. Dacă fișierul nu a putut fi deschis, folosim clasa QMessageBox pentru a arăta utilizatorului o fereastră pop-up cu un mesaj de eroare (a se vedea clasa descriere QMessageBox. Pentru mai multe informații).

citirea datelor devine o sarcină trivială, din cauza QTextStream clasa - înfășurați QFile obiect. Funcția readAll () returnează conținutul fișierului ca un QString obiect. Acest conținut am pus în cutie pentru a edita textul. Apoi, vom închide fișierul cu funcția închidere (). pentru a reveni descriptorul de fișier al sistemului de operare.

Vom proceda la punerea în aplicare a salva fantă ().

Pentru a salva datele, vom folosi din nou QTextStream de clasă. Cu acesta, puteți înregistra șir QString într-un fișier folosind operatorul <<.