Programare in interfata grafica c. Crearea unui GUI cu Qt

O zi buna! În acest tutorial, vom crea prima aplicație GUI în MS. Studio vizual. Va fi un fel de „Hello World” pentru aplicații grafice. Voi spune imediat că Utilizarea Windows Forms nu este singura modalitate prin care programatorii C# pot crea aplicații grafice (aplicații cu o interfață grafică de utilizator), dar este un loc bun pentru a începe să învețe. Și așa, lansăm Visual Studio.

Lansat? Apoi la afaceri! Mergem la meniul principal și selectăm elementul „Fișier - Nou - Proiect”, așa cum se arată în figura de mai jos.

În fereastra care apare:

  • în partea stângă, selectați „Șabloane - Visual C # - Windows”;
  • în zona principală, selectați elementul „Windows Forms Application”;
  • în partea de jos a ferestrei, introduceți numele proiectului și indicați locația acestuia pe disc.

În general, așa cum se arată în figura de mai jos.

Ai specificat ce ai nevoie? Apoi faceți clic pe butonul „OK”. Acum ar trebui să vedeți ceva de genul acesta (zonele principale sunt evidențiate cu dreptunghiuri):

În imaginea de mai sus, am etichetat zonele principale: zona designerului (stânga sus), zona exploratorului de soluții (dreapta sus) și zona proprietăților (dreapta jos). Acestea sunt domeniile cu care vom lucra cel mai des.

În zona de proiectare, există acum o „formă” goală, aceasta este așa-numita fereastră, în acest caz, fereastra principală a programului nostru. Zona de proprietăți afișează proprietățile elementului selectat în designer, în acest caz, formularul nostru, dar zona de explorare a soluției conține fișiere de proiect, inclusiv cele legate de formularele (ferestrele) programului. Și acum, să ne schimbăm puțin formularul și să rulăm această primă aplicație.

Pentru a face acest lucru, selectați formularul din designer (pentru aceasta, puteți pur și simplu să faceți clic stânga pe formular) și mergeți la blocul de proprietăți, în care găsim linia „Text” (cuvântul este text, căutăm în coloana din stânga), așa cum se arată în figura de mai jos.

Proprietatea „Text” a formei principale a cererii

Vă rugăm să rețineți că coloana din stânga arată numele (numele proprietății), iar coloana din dreapta arată valoarea acestuia.

În acest caz, avem de-a face cu o proprietate text, iar valoarea acesteia este afișată în titlul ferestrei, așa că acum să punem ceva propriu acolo, de exemplu, ceva de genul: „Fereastra principală”, așa cum se arată în figura de mai jos:

Acum, puteți construi proiectul și îl puteți rula. Pentru a face acest lucru, accesați meniul principal și selectați „Build - Build Solution”. Și apoi lansăm aplicația, pentru aceasta selectăm elementul „Debug - Run without debugging” din meniul principal. Ca rezultat, ar trebui să vedeți următoarea fereastră.

În lecția următoare, ne vom uita la munca simpla cu designerul de formulare și setarea elementelor GUI, iar această lecție sa încheiat, am creat prima aplicație grafică, am construit-o și am lansat-o.

Bună ziua tuturor. În lecțiile mele anterioare, am vorbit despre crearea aplicațiilor de consolă în mediul Borland C++ Builder. Pornind de la această lecție, vom învăța C++ folosind aplicații grafice ca exemplu. Cine vrea să învețe cum să creeze console. Poate citi cartea „Arta de a construi aplicații de consolă în C++”. Prima noastră aplicație va fi un program care afișează un număr aleatoriu. Deschidem borlandyayu, pur și simplu nu creați o aplicație de consolă. După lansare, pe ecran va apărea următorul formular:

În partea de sus va fi o bară de instrumente:

În dreapta, Inspectorul de obiecte și Lista de formulare:

Componentele (spre deosebire de BASIC) sunt deja împărțite în file. După nume, nu este greu de ghicit ce tip de componente sunt plasate pe filă. Deschideți fila standard și plasați componentele pe formular ca al meu:

Butonul va fi etichetat Button1. Ea trebuie schimbată. În fereastra din stânga jos a lui Borland, sunt afișate proprietățile componentelor; acestea trebuie modificate cu ale noastre:

La butonul Legendă (Inscripție) schimbați în Generare

Pentru eticheta Label1, modificați proprietatea Caption la Number

În Edit1, proprietatea Text (textul din editare în sine) este pur și simplu ștearsă.

După aceste manipulări, formularul va arăta ca al meu:

Am terminat cu stilul vizual, apropo, majoritatea proprietăților din Borlyad arată ca BASIC sau Delphi. Experimentează cu ei.

Acum să vorbim despre evenimente. Fiecare componentă are evenimente, ele conțin cod care va fi executat când sunt îndeplinite anumite condiții. De exemplu, pentru un buton, codul din evenimentul Click va fi executat atunci când facem clic pe el etc.

Astăzi vom folosi doar evenimentul Click. Faceți clic de două ori pe butonul și intrați în fereastra de cod:

Evenimentul Click pentru buton a fost generat automat. Codul, ca o aplicație de consolă, este plasat între acolade. Scriem codul:

Void __fastcall TForm1::Button1Click(TObject *Sender) ( dublu aaa; //Puneți numărul generat de procesor aici String count; //Scrieți același număr, dar redus la un șir randomize; //Acest lucru este necesar pentru ca numerele nu se repetă aaa=aleatoriu (34)*43646; //Generează orice număr de număr = FloatToStr (aaa); //Traduceți numărul într-un șir folosind funcția FloatToString Edit1->Text=count; //Ieșiți o variabilă șir în fereastra de text)

Algoritmul este simplu, declarăm o variabilă pentru a stoca un număr fracționar în ea și o variabilă pentru număr sub formă de șir. Faptul este că numărul generat imediat nu poate fi afișat într-o casetă de text (va fi o eroare. Era așteptat un text și a fost primit un număr), așa că folosind funcția FloatToStr traducem numărul într-un șir și îl afișăm într-un casetă de text. Pentru ieșire, ne întoarcem (folosind semnul -> (similar cu un punct în vb)) la proprietatea text Edit1 și afișam textul acolo. Asta este tot pentru acum.

Apropo, o întrebare de umplere: cine se reproduce mai repede virușii informatici, chineză sau iepuri?


Comentarii()

Vitay

artyomka

"randomize; //Acest lucru este necesar pentru ca numerele să nu se repete." tot repet. ce să fac?

Andrew

Există 2 opțiuni 1-utilizați „randomize();” sau în linia 6 complică funcția de ex. adăugați mai multe secunde

Andrew

„secunde” sau rezultatul adunării a două numere pseudoaleatoare împărțite la secunde - cu cât sunt mai mulți factori, cu atât numărul este mai imprevizibil

artyomka Alexey (alex13sh)

randomizare
asta pentru ca numerele să nu se repete atunci când programul este pornit
ei bine, adica. a pornit programul, apăsați butonul de mai multe ori
1)5
2)47
3)86
asta sunt eu in numere intregi
bine, dacă opriți programul și îl porniți din nou, atunci când butonul este apăsat în serie, vor apărea aceleași numere cu aceleași secvențe
aceasta este fără randomizare, dar aceasta nu va fi eliminată

Și ce se repetă în acest fel
1)3
2)69
3)1
4)3
5)8
6)1
ACEST ACEST NU SE APLICA LA randomizare
pentru a evita acest lucru Andrey a răspuns deja))

Begzod

Am vizual c++.net pe computer. Nu găsesc manuale, coduri sursă pentru el. Ajutor pzhs.

Ali05

Am văzut în librărie un manual despre Visual C ++.Net „Nikita Kultin Basics Programming in Microsoft Visual C++ 2010", arată doar cum se creează aplicatii grafice sub Windows (WinForms).

Coolhacker Nintendo

Mă întreb ce este „răul” lui?

Coolhacker

În absența capacității de a prezenta corect materialul și de a vă obișnui, domnilor, cu un stil de programare prost, a la nume de variabile/funcții transliterate.

Edward Coolhacker

Ministerul Educației și Științei al Federației Ruse

Instituția de învățământ bugetară de stat federală

studii profesionale superioare

„UFA STATE OIL

UNIVERSITATE TEHNICA"

Departamentul de Informatică și Inginerie Cibernetică

Crearea unei aplicații GUI în Microsoft Visual Studio 2010

Ajutor didactic

pentru orele de laborator și practice

cu studenţii direcţiei

230100 (09.03.01) „Inginerie informatică și informatică”

Suportul didactic oferă informații teoretice, sarcini pentru lucrări practice și de laborator ale cursului „Programare”.

Manualul se adresează profesorilor disciplinei, precum și studenților direcției: 230100 „Informatică și Inginerie Calculatoare”.

Alcătuit de: Gabdullina A.A., Art. lector la catedra VTIK

Druzhinskaya E.V., art. lector la catedra VTIK

Referent: Filippov V.N., Ph.D., conferențiar al Departamentului. VTIK.

1. Informații teoretice 4

1.1. Concepte de bază 4

1.2. Cunoștință cu aplicație Windows Formular în Microsoft Visual Studio 2010 4

1.3. Controlul Form 7

1.5. Funcția MessageBox 9

1.6. TextBox Control 10

2. Sarcina practică. Introducere în aplicația Windows Form în Microsoft Visual Studio 2010 12

2.1. Structura de evaluare a lucrărilor finalizate 12

2.2. Procedura de efectuare a lucrărilor practice 12

3. Lucrări de laborator. Dezvoltarea aplicațiilor în Microsoft Visual Studio 2010 16

3.1. Comanda de laborator 16

3.2. Sarcina 1. Tabelarea unei funcții și calcularea valorilor acesteia în intervalul specificat cu un anumit pas 16

3.3. Sarcini individuale 19

3.4. Sarcina 2. Prelucrare tablouri bidimensionale 21

3.5. Sarcini individuale 27

  1. Informații teoretice

  1. 1.1. Noțiuni de bază

Automatizarea proceselor informaționale este reprezentată în prezent, în primul rând, de dezvoltarea unei aplicații software cu interfață grafică cu utilizatorul (GUI) care gestionează fluxurile de date.

Interfața grafică cu utilizatorul (GUI) este un sistem de mijloace pentru interacțiunea utilizatorului cu un dispozitiv bazat pe prezentarea tuturor obiectelor și funcțiilor de sistem disponibile utilizatorului sub formă de componente grafice ale ecranului (ferestre, butoane, bare de defilare etc.).

Cel mai adesea, elementele de interfață din GUI sunt implementate pe baza de metafore și își afișează scopul și proprietățile, ceea ce facilitează înțelegerea și stăpânirea programelor de către utilizatorii nepregătiți. Astfel, munca utilizatorului se desfășoară cu formulare de ecran care conțin obiecte de control și bare de instrumente cu butoane de acțiune pentru procesare.

O interfață grafică standard pentru utilizator trebuie să îndeplinească o serie de cerințe:

Menține tehnologia informațională a lucrului utilizatorului cu produsul software;

Concentrați-vă pe utilizatorul final care comunică cu programul la nivel extern de interacțiune;

Satisfaceți principiul „șase”, atunci când nu sunt incluse mai mult de 6 concepte într-o bară de meniu, fiecare dintre acestea conținând nu mai mult de 6 opțiuni;

    menține un scop standardizat al obiectelor grafice și, dacă este posibil, locația lor pe ecran.

În programarea orientată pe obiecte, avem de-a face cu clase și obiecte. Obiectele sunt tipuri de date compuse: combină mai multe valori într-o singură unitate și ne permit să scriem și să stocăm acele valori după nume. Cu alte cuvinte, un obiect este o colecție neordonată de proprietăți, fiecare cu un nume și o valoare. Valorile numite conținute într-un obiect pot fi fie tipuri primitive, cum ar fi numere sau șiruri de caractere, fie alte obiecte.

Când se dezvoltă aplicații non-console, conceptul principal este Formularul.

Un formular este un container pentru găzduirea controalelor mediului de proiectare.

Proprietăți - capacitatea de a accesa informațiile stocate în acest element.

Metodele sunt un set de acțiuni pe care un obiect le poate efectua.

Un eveniment este o acțiune recunoscută de un obiect (de exemplu, un clic de mouse, o apăsare de tastă), pentru care poate fi programat un răspuns, de exemplu. răspunsul obiectului la eveniment.

Ultima actualizare: 26.05.2019

În Xamarin.Forms, interfața vizuală este formată din pagini. Pagina este un obiect al clasei Page , ocupă întreg spațiul ecranului. Asta vedem pe ecran dispozitiv mobil este o pagină. O aplicație poate avea una sau mai multe pagini.

Pagina acceptă unul dintre containerele de aspect ca conținut, care, la rândul său, conține elemente vizuale standard, cum ar fi butoanele și câmpurile de text, precum și alte elemente de aspect.

Să luăm proiectul HelloApp creat în subiectul anterior (sau să creăm unul nou). În mod implicit, întreaga interfață este creată în clasa App, care se află în fișierul App.xaml.cs și reprezintă aplicația curentă:

Codul său implicit este:

Utilizarea sistemului; folosind Xamarin.Forms; folosind Xamarin.Forms.Xaml; namespace HelloApp ( clasă parțială publică App: Application ( public App() ( InitializeComponent(); MainPage = new MainPage(); ) protected override void OnStart() ( // Gestionați când pornește aplicația ) protected override void OnSleep() ( / / Gestionați când aplicația dvs. inactivează ) protected override void OnResume() ( // Gestionați când aplicația dvs. se reia ) ) )

Clasa App începe cu constructorul, unde este apelată mai întâi metoda InitializeComponent(), care inițializează obiectul, iar apoi este setată proprietatea MainPage. Prin această proprietate, se stabilește clasa App pagina principala aplicatii. În acest caz, este definit de clasa HelloApp.MainPage, care este clasa definită în fișierele MainPage.xaml și MainPage.xaml.cs.

Dar această cale nu este singura. Xamarin.Forms vă permite să creați o interfață vizuală fie folosind cod C#, fie declarativ folosind limbajul xaml, similar cu html, sau o combinație a acestor abordări.

Crearea unei interfețe din codul C#

Să adăugăm o clasă C# obișnuită la proiectul HelloApp, pe care o vom numi StartPage .

Și definiți următorul conținut în această clasă:

Utilizarea Xamarin.Forms; namespace HelloApp ( clasa StartPage: ContentPage ( public StartPage() ( Label header = new Label() ( Text = "Salut din Xamarin Forms" ); this.Content = header; ) ) )

Această clasă reprezintă o pagină, deci moștenește din clasa ContentPage. Constructorul creează o etichetă cu text, care este setată ca conținut al paginii (this.Content = header).

Pentru a desemna MainPage ca Pagină de start, schimbați clasa aplicației:

Utilizarea Xamarin.Forms; namespace HelloApp ( public parțial clasă App: Application ( public App() ( InitializeComponent(); MainPage = new StartPage(); ) protected override void OnStart() ( // Gestionați când pornește aplicația ) protected override void OnSleep() ( / / Gestionați când aplicația dvs. inactivează ) protected override void OnResume() ( // Gestionați când aplicația dvs. se reia ) ) )

Proprietatea MainPage indică acum către pagina de start nou creată.

De asemenea, merită remarcat faptul că Visual Studio are un șablon gata făcut pentru adăugarea de noi clase de pagină cu cel mai simplu cod. Deci, pentru a adăuga o pagină nouă, trebuie să selectați șablonul Pagina de conținut (C#) atunci când adăugați un nou element:

Această clasă este adăugată proiectului principal al soluției (în acest caz este HelloApp).

Clasa de pagină adăugată va avea următorul cod:

Utilizarea sistemului; folosind System.Collections.Generic; folosind System.Linq; folosind System.Reflection.Emit; folosind System.Text; folosind Xamarin.Forms; namespace HelloApp (clasa publică Pagina 1: ContentPage ( public Page1() (Conținut = nou StackLayout ( Copii = ( etichetă nouă ( Text = "Pagina Bună") ) ); ) ) )

Această clasă va moșteni și din clasa de bază ContentPage și va avea aproape aceeași organizare ca și clasa MainPage creată mai sus.

Și, de asemenea, în clasa aplicației, putem seta această pagină ca pagină de pornire:

Utilizarea Xamarin.Forms; namespace HelloApp (aplicație publică parțială de clasă: aplicație (public App() (InitializeComponent(); MainPage = new Page1(); ) //........... ) )

5

Am creat multe secțiuni diferite ale sistemului GUI Nintendo DS, cum ar fi butoane și casete de text și casete de selectare, dar am nevoie de o modalitate de a ascunde aceste clase într-o singură clasă Gui, astfel încât să pot desena totul pe ecran dintr-o dată și să verific toate butoanele simultan. pentru a verifica dacă vreun buton este apăsat. Întrebarea mea este care este cea mai bună modalitate de a organiza toate clasele (cum ar fi butoanele și casetele de text) într-o singură clasă GUI?

Iată un fel în care m-am gândit, dar nu mi se pare corect:

Editați | ×: Eu folosesc C++.

Clasa Gui ( public: void update_all(); void draw_all() const; int add_button(Button *button); // Returnează id-ul butonului void remove_button(int button_id); privat: Button *button; int num_buttons; )

Acest cod are câteva probleme, dar am vrut doar să vă dau o idee despre ceea ce vreau.

  • 5 răspunsuri
  • Triere:

    Activitate

2

Această întrebare este foarte asemănătoare cu cea pe care urma să o postez, doar a mea este pentru programarea Sony PSP.

Caut ceva de ceva vreme, am consultat câteva cărți și VTM-uri, iar până acum aceasta este o idee aproximativă a sistemelor ui simple.

Clasa uiElement() (... virtual void Update() = 0; virtual void Draw() = 0; ... ) clasa uiButton() public: uiElement (... virtual void Update(); virtual void Draw() ; ... ) clasa uiTextbox() public: uiElement ( ... virtual void Update(); virtual void Draw(); ... ) ... // Alte elemente ui clasa uiWindow() ( ... void Update (); void Draw(); void AddElement(uiElement *Element); void RemoveElement(uiElement *Element); std::list elemente; ... ) void uiWindow::Update() ( ... pentru (list ::iterator it = Elements.begin(); it != Elements.end(); it++) it->Update(); ... ) void uiWindow::Draw() ( ... pentru (list ::iterator it = Elements.begin(); it != Elements.end(); it++) it->Draw(); ... )

principiul este crearea ferestrei și a elementelor de atac interfața cu utilizatorul la acesta și apelați metodele de desen și actualizare din funcțiile principale corespunzătoare.

Nimic nu funcționează încă pentru mine, deoarece am probleme cu codul de desen. Cu diverse API-uri pe PC și PSP, mă uit la codul wrapper pentru OpenGL și psp gu.

Sper că acest lucru vă ajută.

0

O strategie utilă de reținut ar putea fi modelul compus. La un nivel scăzut, vă poate permite să manipulați mai ușor toate obiectele GUI (și colecțiile de obiecte) odată ce acestea au fost create. Dar nu știu nimic legat de designul GUI, așa că un loc pentru a găsi inspirație generală este în codul sursă al unui proiect existent. WxWidgets este o interfață grafică multiplatformă cu o interfață accesibilă cod sursa. Mult succes cu proiectul tau!

0

3

Pentru cei interesați, iată setul meu de instrumente GUI open source, cu licență BSD pentru DS:

Răspunsul Subject2k este destul de bun, dar aș recomanda serios să aveți cod care conține elemente de interfață copil în clasa de bază uiElement. Acesta este modelul pe care l-am urmat în Woopsie.

daca tu nu suportați acest lucru în clasa de bază, veți întâmpina probleme serioase când încercați să implementați ceva mai complex decât o casetă de text și un buton. De exemplu:

  • Barele de tabel pot fi modelate ca butoane multiple grupate sub un singur element UI părinte care oferă exclusivitate reciprocă de selecție;
  • Grupuri de radiouri (de-a lungul timpului);
  • Scrollbars pot fi reprezentate ca element glisor/jgheab și buton sus/jos;
  • Listele de defilare pot fi reprezentate ca un container și mai multe elemente de interfață cu utilizatorul.

De asemenea, merită să ne amintim că DS are un procesor de 66 MHz și 4 MB de RAM, care este folosit atât pentru stocarea programului, cât și pentru rularea acestuia (discurile DS sunt încărcate în RAM înainte de a rula). Chiar ar trebui să îl considerați ca un sistem încorporat, ceea ce înseamnă că nu există STL. Am eliminat STL-ul din Woopsi și am reușit să economisesc 0,5MB. Nu mult după standardele desktop, dar este 1/8 din totalul de memorie DS disponibilă consumată de gunoiul STL.

Detaliez întregul proces de scriere a unei interfețe de utilizator pe blogul meu:

Include o descriere a doi algoritmi pe care i-am inventat pentru redesenarea ecranului, care este partea dificilă a creării unei GUI (unul doar sparge dreptunghiuri și își amintește zonele vizibile, iar celălalt folosește arbori BSP, care este mult mai eficient și mai ușor de utilizat. înţelege), sfaturi de optimizare etc. d.



Se încarcă...
Top