joi, 2 aprilie 2020

Qt - Saptamana a 7-a, (mini) proiect

Aici va ofer un minighid despre cum sa faceti voi un mic program simplu si original care face ceva util, folosind Qt-ul. Intrucat deocamdata nu stim inca multe despre Qt am sa ma marginesc la un proiect simplu, o fereastra (se numeste forma - Form in Qt) care face anumite calcule prestabilite pe baza datelor introduse.

Inginerii, matematicienii, tehnicienii si fizicienii stiu ca exista formule pentru calculat o multime de lucruri: de la solutiile ecuatiei de gradul al doilea si ariile figurilor geometrice la rezistenta si curentul dintr-un circuit , pina la greutatea ideala si timpul de cadere al corpurilor in vid. Exista formule pentru aproape orice (iar daca fenomenul e modelat printr-o expresie aritmetica cu atat mai usor).

Pina si atat de dezbatutul coronavirus poate fi exemplu pentru o formula sau doua: Numarul de cazuri din ziua viitoare este produsul numarului de cazuri din ziua anterioara inmultit cu un factor (daca vom continua sa ne miscam unii printre altii ca pina acum). La fel si numarul de vindecati. E drept, factorul  aceasta nu e chiar o constanta, in practica el variaza, dar pe termen scurt il putem presupune constant ca sa schitam o prognoza pentru ziua urmatoare.

Nota: In practica acest factor de crestere a numarului de cazuri raportate a variat intre 1.17 si 1.09 cu cresteri pina la 1.33.

Asa ca schitam repede cu Designerul vizual interfata unei aplicatii:

Designerul vizual este acel editor care porneste automat cand dati click pe un fisier .ui inclus in proiect.
Daca faceti un nou proiect de tip Application -> Qt Widgets Application - adica de primul tip disponibil, vi se include in proiect si un fisier .ui, in dosarul Forms.

Ati mai folosit asa ceva cand ati programat Visual Basic si/sau Gambas.)

Ok. Interfata noastra va fi asa:


Exercitiul 1: Dupa ce terminati acest mini proiect alegeti fenomenul preferat si construiti pentru el interfata unei aplicatii care proceseaza datele de intrare si produce rezultate.

 Asa va arata interfata dupa ce dam click pe fisierul .ui, pornim editorul de fisiere .ui adica designerul vizual si adaugam pe rand:
- 6 etichete, (ordinea nu conteza la etichete decat daca le veti rescrie textul prin program)
- 4 campuri de tip lineEdit.
- 2 butoane PushButton (se vad in stanga in rubrica Buttons, primul epush Button, pentru celelate faceti scroll, cautati mai jos)

Notati sau tineti minte numele componentelor (widgets) care apar pe interfata. Qt le ofera nume automat, prin numerotare dar atentie, cand sunt mai mult de 5 de acelasi fel devine incomod.

In acest caz puteti opta sa le dati nume sugestive: vindecati sau confirmati desi poate ar fi mai sugestib strEditVindecati si strEditConfirmati, incluzand in numele lor si tipul si folosul acelor campuri de pe formular.


 De stiut pe viitor: Puteti schimba numele campurilor, cu un dublu click pe ele, in panoul din stanga. dati pe un nume, sa zicem label un dublu click sa vedeti ca devine editabil. Editati-l.

Atentie: Campurilor din formular in care se scriu sau se introduc (se aleg) datele folosite la calcule bine sa nu le incurcati, cand vor fi multe va trebui sa le dati nume sugestive. Cand sunt putine, ca aici, puteti folosi numele implicite.
Ce-ar fi sa apara vindecatii de maine in locul confirmatilor dintr-o greseala ?

Interfata e gata, dati click pe Editul din dreptul lui Horizontal layout si reveniti in modul de lucru.

Acum adaugam in clasa ferestrei sloturile core corespund butoanelor.
(Slot - concept Qt - va fi explicat pe larg intr-un blog ulterior, dar puteti citi pg 93-94 sau alt capitol de sloturi si semnale din carti.)

Ideea e :
1) Sa descriem , in declaratia de clasa ca butoanele vor face ceva la apasare.
2) Sa descriem in codul clasei exact ce fac aceste butoane.


Numele slotului este format scriind: on_widgetul_semnalul.  La noi on si pushButton si clicked. Aici se poate gresi si se va gresi !!

Acum e momentul sa implementam executia a ce se face cand apasam pe butoane.

Exercitiu: In poza este o mica greseala. corectati !

Atentie: Coeficientul e valabil doar azi, poate si maine si in cateva zile urmatoare.
QString::number(...) transforma numarul dat ca argument in QString.

QString are si niste metode toFloat si altele care permit conversia in numere a acelor stringuri. Nu se vede nici un ValueBox intre widget-urile Qt accesibie din Designer (poate daca mai instalam componente ?) dar puteti folosi si un SpinBox pe post de Value Box la nevoie.

Intrebare de control: Ce rost are variabila Ok si cum lucreaza if-ul de la sfarsitul calculelor. Ce face el ?

Intrebare de control: De ce a fost nevoie de if-urile acelea ?



Faceti corecturile semnalate de IDE si rulati aplicatia:


                        Prognoza pe Joi 2 aprilie pe baza datelor de miercuri.

Acum fiindca este joi, ora 12:55 hai sa vedem impreuna datele anuntate la ora 13:00, pentru a le compara cu estimarea noastra. Este eroarea mai mica de 10% ?

Datele reale, ora 13 pt joi 2 aprilie: 2738 si 267. (Digi 24 TV HD).

Nota: Transmiterea de informatii false constituie infractiune. Nu transmiteti aceste prognoze, care sunt prea simple matematic incat sa fie valabile, mai ales pe termen lung . In realitate curba nu este o exponentiala, cum ar rezulta daca am folosi zi de zi din acest program.

Exercitiul 2: Completati acest program incat sa produca prognoza pe doua zile.

Exercitiul 3: Completati acest program cu un buton de copiere care sa copie prognoza ultimei zile prognozate drept date initiale pentru o alta prognoza. (Atentie, erorile se vor acumula).


      Prognoza de Vineri 3 aprilie pe baza datelor estimate a doua oara. (Erori cumulate).

Este posibil, spune micul nostru program, ca vineri sa depasim 3000 de cazuri, (sau poate nu - zice optimistul). Dar oricum, stati in case dragii mei, si distantati-va la dublul distantei. (Ceea ce scade probabilitatea de a fi stropit de un purtator care stranuta.)




 

Niciun comentariu:

Trimiteți un comentariu