După cum am scris calculatorul sau experiențele mele cu qte5, software-ul pentru faruri

Așa că am venit cu ideea de a repeta "feat" scriind un calculator, dar deja pe D și Qt5!

În primul rând, nu sunt familiarizat cu Qt și conceptele sale, deși am încercat odată să-l cunosc. Cu toate acestea, sunt sigur că ignoranța Qt5 nu este o problemă, deoarece World Wide Web are o mulțime de exemple în acest minunat set de instrumente și există, de asemenea, o documentație destul de cuprinzătoare API disponibilă aici.







În primul rând, vedem că libQtE5Widgets64.so (sau QtE5Widgets64.dll) disponibile (presupunând că aveți, precum și sistemul meu de operare pe 64 de biți), iar în cazul în care acest lucru nu este cazul, descărcarea și colectează aceste biblioteci.

Am avut noroc că am avut absolut curat Kubuntu 16.04 și unul dintre oaspeții noștri a descris procedura detaliată pentru asamblarea QtE5 pe Linux pe 64 de biți, pe care l-am folosit. În plus, înainte de a compila, a trebuit să instalați o parte din software-ul suplimentar cu comanda:

În continuare, am avut un pic mai greu pentru a compila proiectul în QtCreator, care se desfășoară sub îndrumarea Kolyvanova Vitali, dar instalarea libQtE5Widgets64.so.1.0.0 compilat am petrecut un pic diferit: în primul rând, am redenumit-o libQtE5Widgets64.so, și apoi pur și simplu copiate în directorul / lib sistem - destul de ciudat, dar această acțiune a fost puțin mai mult decât suficient.

Acum, tot ce ne trebuie este un fișier qte5.d din livrarea standard QtE5 și un fișier curat app.d.

Aceste două fișiere ne-am unit într-un singur proiect simplu MonoDevelop mediu MONOD, utilizați opțiunea de a crea un proiect gol (cum să facă acest lucru, am descris-o deja într-un articol) și a obține astfel posibilitatea de realizare automată a codului și o listă la îndemână toate funcțiile, care în prezent Momentul este conținut în QtE.

La această pregătire pentru dezvoltarea calculatorului sa terminat și trecem treptat la procesul de creare a acestuia.

Mai întâi, să definim ce elemente de interfață trebuie să implementăm calculatorul cel mai simplu, care va conta doar în numere întregi (în principal datorită unei limitări pur tehnice, totuși acest lucru nu este atât de important pentru noi).

Este destul de evident că pentru calculator aveți nevoie de un afișaj, rolul căruia va fi jucat de elementul QLCDNumber; mai multe butoane pentru numere și operații care pot fi implementate utilizând comanda QPushButton; și necesită, de asemenea, un număr de așa-numiți "sizers" sau "egalizatori" pentru a plasa elemente în interiorul lor: QVBoxLayout - pentru plasarea verticală a elementelor din interiorul și QHBoxLayout - pentru plasarea orizontală a elementelor.

Sper foarte mult că sunteți înainte de a citi acest articol, chiar scanat doar articolul «QtE5 - Studiul D și Qt5 într-un mediu grafic confortabil“, deoarece design-ului aplicatiei QtE5 foarte dificil (cel puțin așa am crezut până acum se pare) și cu greu voi putea să o explic în câteva cuvinte și, în plus, codul complex pentru plasarea elementelor continuă ...

În plus față de elementele de interfață ele însele, avem nevoie de un element în care să putem plasa în siguranță comenzile necesare, cum ar fi butoanele, etc. Din fericire, în Qt5 există un astfel de element și se numește QWidget și din acest element trebuie implementat moștenire pentru a crea o fereastră cu propriile elemente GUI:

Vom folosi aproximativ această piesă în calculatorul nostru.

Mai întâi vom crea un alias pentru QtE.WindowType pur pentru a simplifica codul și ușurința de citire, și apoi defini o clasă derivată din QWidget MainForm. În clasa MainForm defini un constructor implicit care are doi parametri - elementul care este „părintele“ (mamă în ceea ce privește apelurile către sistem, mai degrabă decât moștenire) și tipul de fereastră. În interiorul constructorului este, de asemenea, nimic neobișnuit se întâmplă: clasa MainForm se referă la constructorul părintelui de super, apoi pune propria sa dimensiune (300 de pixeli lungime și 400 în înălțime), și apoi se afișează în zona de antet a unei anumite etichete (în acest caz, această linie este inscripția - "Calculator QtE"). Dar următoarea declarație, și anume instrucțiuni setStyleSheet (WHITE) este deja neobișnuit. Faptul că această afirmație este la fel aplicabilă la majoritatea elementelor QTE GUI și vă permite să utilizați cunoștințe de HTML și CSS pentru a specifica aspectul unui element, în acest caz - o fereastră normală. enumerare WHITE De asemenea, este unul dintre elementele strategiei pentru simplificarea codului și stabilește constanta șir obișnuit, care conține instrucțiunile pentru pictura alb de fundal.







Acum, putem merge la conținutul interior al clasei MainForm și, pentru început, definim aproape întregul set de elemente de interfață:

Aproape toate (și acest lucru este esențial pentru numere, operații și butonul calcula), pentru că unul dintre elementele interfeței este definită ca variabila globală (da, da, știu că nu e bine, dar celelalte opțiuni nu au fost), și anume - QLCDNumber:

După aceasta, puteți personaliza comenzile, în funcție de nevoile noastre, și vom începe, probabil, cu afișajul LCD, stilizând-o sub display-ul calculatoarelor de buzunar convenționale:

Acest cod trebuie plasat direct în interiorul constructorului clasei MainForm, deoarece este codul de inițializare. Cu toate acestea, trebuie să explicați puțin despre ceea ce face acest set de metode pentru obiectul lcd. Metoda setMode stabilește modul de afișare a valorilor pe indicatorul LCD și ia ca argument o constantă (sau enumerare, nu voi spune exact) care este plasată direct în aceeași clasă. În acest caz, QLCDNumber.Mode.Dec este setat la un număr de zecimale, deși de dragul interesului, puteți pune ceva mai interesant, de exemplu. modul de afișare hexazecimal (constantă QLCDNumber.Mode.Hex). După setarea modului de afișare corectă, am stabilit stilul de afișare cu ajutorul CSS (voi spune că metoda setStyleSheet este, am venit de multe ori peste!) Și apoi utilizați metoda principală pentru noi - metoda de afișare, care vă permite să afișați LCD un număr întreg.

Din păcate, din cauza afișării, calculatorul nostru va conta doar în numere întregi :(
Ecranul LCD nu este singurul element de interfață, ceea ce înseamnă că trebuie să vă gândiți să plasați elementele în fereastra aplicației.

Faptul este că elementele de interfață din Qt5 pot fi plasate în fereastra aplicației utilizând așa-numitele. sizers sau, așa cum le numește dezvoltatorul QtE5, egalizatoare.

Sonde QtE5 în două tipuri: QVBoxLayout - vertical și QHBoxLayout - egalizator orizontal. În ele, vom plasa butoanele utilizând metodele definite pentru ambele tipuri de sizere: addWidget, care pune controalele, și addlayout, care găzduiește sizerele.

Creăm elementele GUI și le-am stabilit proprietățile, după care le creăm și le plasăm unul după celelalte elemente (doar urmăriți codul, altfel nu poate fi explicat: D). Plasarea în sine va fi realizată folosind construcția remarcabilă a limbajului de programare D cu:

În plus, după plasarea de elemente și sizers (fă-o în mod constant!), Am loc ultima Sizer direct în fereastra principală folosind metoda MainForm setLayout clasa. Pentru a aduce codul, este evident că plasarea și configurația elementelor este foarte simplu, atât în ​​general, și crearea lor - în cursul creației, noi pur și simplu trece pe indicatorul de obiect corect la elementul principal (părinte, în acest caz, este o formă de MainForm) și unele parametr- Un descriptor care poate fi un text de buton sau alt descriptor adecvat.

Cu toate acestea, codul de mai sus nu este încă finalizat, deoarece nu am descris încă logica calculatorului și evenimentele care leagă butoanele deja plasate pe formular și pe ecranul LCD.
Definim numărul variabilelor globale care urmează să fie acumulate un număr de operații argumente de adunare, scădere, înmulțire și împărțire, și să definească un șir de stocare rezultatul operației (necesare pentru punerea în aplicare a anumitor comportamente calculator de buzunar obișnuit) și o variabilă numerică care va menține o tranzacție totală adecvată pentru afișare pe ecran:

Acum vom descrie reacția butoanelor numerice și a butonului pentru schimbarea semnului numărului utilizând evenimentele definite astfel:

Funcționează foarte simplu: vom atașa numerele la numărul afișat momentan pe calculator cu ajutorul operatorului de concatenare a șirului. Funcțiile auxiliare updateLCD și setOperationSign pot afișa inteligent numărul de rezultat și pot seta corect semnul operației matematice.

În plus, funcția setOperationSign și operațiile corespunzătoare vor putea urmări operațiunea matematică selectată a utilizatorului (prin salvarea semnului de operare în variabila operațiuniiVariație) sau pentru a urmări resetarea valorii curente de pe afișaj.

Acum rămâne numai identificarea operației matematice alese de utilizator și actualizarea valorii pe afișaj, de exemplu, astfel:

Prin urmare, necesitatea de a aduce o tratare a evenimentului pentru a plasa în interiorul unui bloc extern (C), pentru a Qt5 în măsură să reacționeze în mod adecvat la un buton clic pe „egal“. Acest handler simplu prooiskhodit traducerea unui șir de cifre conduce într-un întreg, și apoi să-l utilizați ca al doilea argument al operației matematice (primul argument, așa cum ați înțeles deja, este o variabilă de rezultat, conținând deja primul număr introdus), care a fost marcajul plasat pe operațiuneSignați folosind procedurile corespunzătoare de procesare.

Următorul pas este plasarea următoarei funcții principale ușor redesenate în fișier:

În interiorul principal vom crea pentru a fi citite de cod pe tipul alias QtE.WindowType.Window Windows și verifică cât de bine podgruzit Qt5. vom crea, de asemenea, o instanță a QApplication (instanță cerere pe Qt, punctul de intrare la cererea introductivă), pentru a captura argumentele de programe transmise (în cazul în care orice va urma), după care se creează o instanță a MainForm (primul parametru - elementul părinte, care în acest caz nu este deoarece cutia în sine va fi primul în ierarhia elementelor GUI, a doua opțiune - același tip de fereastră).
Apoi, afișăm fereastra creată și salvăm indicatorul pentru ea pentru Qt5, și doar o rulați.

Îl salvăm într-un fișier și îl compilam, execută-l, obține următorul rezultat:

După cum am scris calculatorul sau experiențele mele cu qte5, software-ul pentru faruri

Multe mulțumiri dezvoltatorului acestei legături cu adevărat magnifice pentru Qt5, Mokhov Gennady Vladimirovich, pentru ajutorul său în a mă învăța să lucrez cu QtE5 și pentru sfaturile foarte valoroase date în timpul redactării acestui articol!







Trimiteți-le prietenilor: