Programiranje u c grafičkom interfejsu. Kreiranje GUI sa Qt

Dobar dan! U ovom vodiču ćemo kreirati vašu prvu GUI aplikaciju u MS-u. vizuelni studio. To će biti neka vrsta "Hello World" za grafičke aplikacije. Reći ću to odmah Upotreba Windowsa Forms nije jedini način za C# programere da kreiraju grafičke aplikacije (aplikacije sa grafičkim korisničkim interfejsom), ali je dobro mesto za početak učenja. I tako, pokrećemo Visual Studio.

Lansiran? Onda na posao! Idemo u glavni meni i biramo stavku "Datoteka - Novo - Projekat", kao što je prikazano na slici ispod.

U prozoru koji se pojavi:

  • na lijevoj strani odaberite "Predlošci - Visual C # - Windows";
  • u glavnom području odaberite element "Windows Forms Application";
  • u donjem dijelu prozora unesite naziv projekta i naznačite njegovu lokaciju na disku.

Općenito, kao što je prikazano na donjoj slici.

Da li ste naveli šta vam treba? Zatim kliknite na dugme "OK". Sada biste trebali vidjeti nešto poput ovoga (glavna područja su istaknuta pravokutnicima):

Na gornjoj slici sam označio glavne oblasti: oblast dizajnera (gore levo), oblast istraživača rešenja (gore desno) i oblast svojstava (dole desno). Ovo su oblasti sa kojima ćemo najčešće raditi.

U oblasti dizajnera sada postoji prazan „forma“, to je takozvani prozor, u ovom slučaju glavni prozor našeg programa. Područje svojstava prikazuje svojstva elementa odabranog u dizajneru, u ovom slučaju našeg obrasca, ali područje istraživača rješenja sadrži projektne datoteke, uključujući i one vezane za forme (prozore) programa. A sada, hajde da malo promijenimo našu formu i pokrenimo ovu prvu aplikaciju.

Da biste to učinili, odaberite obrazac u dizajneru (za to možete jednostavno kliknuti lijevom tipkom miša na obrazac) i idite na blok svojstava, u kojem nalazimo redak "Tekst" (riječ je tekst, tražimo u lijevoj koloni), kao što je prikazano na donjoj slici.

Svojstvo "Tekst" glavnog obrasca aplikacije

Imajte na umu da lijeva kolona prikazuje naziv (ime svojstva), a desna njegova vrijednost.

U ovom slučaju imamo posla sa svojstvom teksta, a njegova vrijednost je prikazana u naslovu prozora, pa hajdemo sada tamo staviti nešto svoje, na primjer, nešto poput: "Glavni prozor", kao što je prikazano na slici ispod:

Sada možete izgraditi projekat i pokrenuti ga. Da biste to učinili, idite na glavni meni i odaberite "Izgradi - Izgradi rješenje". A zatim pokrećemo aplikaciju, za to u glavnom izborniku odabiremo stavku "Debug - Run without debugging". Kao rezultat, trebali biste vidjeti sljedeći prozor.

U sljedećoj lekciji ćemo pogledati jednostavan posao sa dizajnerom obrasca, i postavljanjem GUI elemenata, i ova lekcija je privedena kraju, kreirali smo prvu grafičku aplikaciju, napravili je i pokrenuli.

Zdravo svima. U prethodnim lekcijama govorio sam o kreiranju konzolnih aplikacija u Borland C++ Builder okruženju. Počevši od ove lekcije, učit ćemo C++ koristeći grafičke aplikacije kao primjer. Ko želi da nauči kako da kreira konzole. Može čitati knjigu "Umjetnost izrade konzolnih aplikacija u C++". Naša prva aplikacija će biti program koji prikazuje nasumični broj. Otvaramo borlandyayu, samo nemojte kreirati konzolnu aplikaciju. Nakon pokretanja, na ekranu će se pojaviti sljedeći obrazac:

Na vrhu će se nalaziti traka sa alatkama:

Sa desne strane, Inspektor objekata i lista obrazaca:

Komponente (za razliku od BASIC-a) su već podijeljene na kartice. Po imenu nije teško pogoditi koji tip komponenti se nalazi na kartici. Otvorite standardnu ​​karticu i postavite komponente na obrazac kao što je moj:

Dugme će biti označeno kao Button1. Treba je promijeniti. U donjem lijevom prozoru Borlanda prikazana su svojstva komponenti, koje se moraju promijeniti u naše:

Na tipku Caption (Inscription) promijenite u Generiraj

Za oznaku Label1, promijenite svojstvo Caption u Number

U Edit1, svojstvo Text (tekst u samom uređivanju) se jednostavno briše.

Nakon ovih manipulacija, obrazac će izgledati kao moj:

Završili smo sa vizuelnim stilom, usput, većina nekretnina u Borlyadu izgleda kao BASIC ili Delphi. Eksperimentišite sa njima.

Hajde sada da pričamo o događajima. Svaka komponenta ima događaje, oni sadrže kod koji će se izvršiti kada se dostignu određeni uslovi. Na primjer, za dugme, kod u Click događaju će se izvršiti kada kliknemo na njega, itd.

Danas ćemo koristiti samo događaj Click. Kliknite dvaput na dugme i uđite u prozor koda:

Događaj klika za dugme je automatski generisan. Kod, poput konzolne aplikacije, nalazi se između vitičastih zagrada. Pišemo kod:

Void __fastcall TForm1::Button1Click(TObject *Sender) ( duplo aaa; //Ovdje stavite broj koji je generirao procesor String count; //Upišite isti broj, ali svedeno na niz nasumično; //Ovo je neophodno kako bi se brojevi se ne ponavljaju aaa=random (34)*43646; //Generiraj bilo koji broj count=FloatToStr (aaa); //Prevedi broj u niz pomoću funkcije FloatToString Edit1->Text=count; //Izlaz varijabli niza u tekstualni prozor)

Algoritam je jednostavan, deklariramo varijablu za pohranjivanje razlomka u nju, a varijablu za broj u obliku stringa. Činjenica je da se odmah generirani broj ne može prikazati u tekstualnom okviru (doći će do greške. Očekivao se tekst i primljen je broj), pa pomoću funkcije FloatToStr broj prevodimo u niz i prikazujemo ga u tekstualni okvir. Za izlaz, okrećemo se (koristeći znak -> (slično tački u vb)) svojstvu teksta Edit1 i tamo prikazujemo tekst. To je sve za sada.

Usput, pitanje za zatrpavanje: ko se brže razmnožava kompjuterski virusi, Kinezi ili zečevi?


Komentari()

Vitay

artyomka

"randomize; //Ovo je neophodno kako se brojevi ne bi ponavljali." I dalje ponavljam. šta da radim?

Andrey

Postoje 2 opcije 1-koristite "randomize();" ili u redu 6 kompliciraju funkciju npr. dodajte još sekundi

Andrey

"sekunde" ili rezultat zbrajanja dva pseudoslučajna broja podijeljena sa sekundama - što je više faktora, to je broj nepredvidljiviji

artyomka Alexey (alex13sh)

nasumično
ovo je tako da se brojevi ne ponavljaju kada se program uključi
pa, to je. uključili program, pritisnite dugme nekoliko puta
1)5
2)47
3)86
ovo sam ja u celim brojevima
pa, ako isključite program i ponovo ga uključite, kada se dugme serijski pritisne, biće isti brojevi sa istim redosledom
ovo je bez nasumice, ali ovo neće biti uklonjeno

I šta se ponavlja na ovaj način
1)3
2)69
3)1
4)3
5)8
6)1
OVO SE NE ODNOSI NA randomizaciju
da izbjegne ovo Andrey je već odgovorio))

Begzod

Imam Visual C++.net na svom računaru. Ne mogu pronaći udžbenike, izvorne kodove za to. Help pzhs.

Ali05

Video sam u knjižari udžbenik za Visual C++.Net "Osnove programiranja Nikita Kultina u Microsoft Visual C++ 2010", samo pokazuje kako se kreira grafičke aplikacije pod Windowsom (WinForms).

Coolhacker Nintendo

Pitam se šta je njegovo "loše"?

Coolhacker

U nedostatku mogućnosti pravilnog prezentovanja materijala i navikavanja vas, gospodo, na loš stil programiranja, a la transliterirana imena varijabli/funkcija.

Edward Coolhacker

Ministarstvo obrazovanja i nauke Ruske Federacije

Federalna državna budžetska obrazovna ustanova

visoko stručno obrazovanje

"UFA STATE OIL

TEHNIČKI UNIVERZITET"

Katedra za računarske nauke i inženjersku kibernetiku

Kreiranje GUI aplikacije u Microsoft Visual Studio 2010

Nastavno pomagalo

za laboratorijsku i praktičnu nastavu

sa studentima smera

230100 (09.03.01) "Informatika i računarsko inženjerstvo"

Nastavno sredstvo daje teorijske podatke, zadatke za praktičan i laboratorijski rad iz predmeta "Programiranje".

Priručnik je namenjen nastavnicima discipline, kao i studentima smera: 230100 "Informatika i računarsko inženjerstvo".

Sastavio: Gabdullina A.A., Art. predavač na katedri VTIK

Druzhinskaya E.V., Art. predavač na katedri VTIK

Recenzent: dr Filippov V.N., vanredni profesor Katedre. VTIK.

1. Teorijske informacije 4

1.1. Osnovni koncepti 4

1.2. Upoznavanje sa Windows aplikacija Obrazac u Microsoft Visual Studio 2010 4

1.3. Kontrolni obrazac 7

1.5. MessageBox 9 funkcija

1.6. Kontrola polja za tekst 10

2.Praktični zadatak. Uvod u aplikaciju Windows Form u Microsoft Visual Studio 2010 12

2.1. Struktura ocjenjivanja obavljenog posla 12

2.2. Postupak izvođenja praktičnog rada 12

3. Laboratorijski rad. Razvoj aplikacija u Microsoft Visual Studio 2010 16

3.1. Laboratorijski nalog 16

3.2. Zadatak 1. Tabuliranje funkcije i izračunavanje njenih vrijednosti u navedenom intervalu sa datim korakom 16

3.3. Individualni zadaci 19

3.4. Zadatak 2. Obrada dvodimenzionalni nizovi 21

3.5. Individualni zadaci 27

  1. Teorijske informacije

  1. 1.1. Osnovni koncepti

Automatizaciju informacionih procesa trenutno predstavlja, prije svega, razvoj softverske aplikacije sa grafičkim korisničkim interfejsom (GUI) koja upravlja tokovima podataka.

Graphical User Interface (GUI) je sistem sredstava za interakciju korisnika sa uređajem zasnovan na prezentaciji svih sistemskih objekata i funkcija dostupnih korisniku u obliku grafičkih komponenti ekrana (prozori, dugmad, trake za pomeranje itd.).

Elementi interfejsa u GUI su najčešće implementirani na osnovu metafora i prikazuju njihovu svrhu i svojstva, što nespremnim korisnicima olakšava razumevanje i savladavanje programa. Dakle, rad korisnika se obavlja sa ekranskim formama koje sadrže kontrolne objekte i alatnim trakama sa akcionim dugmadima za obradu.

Standardno grafičko korisničko sučelje mora ispunjavati niz zahtjeva:

Održavati informatičku tehnologiju rada korisnika sa softverskim proizvodom;

Fokus na krajnjeg korisnika koji komunicira sa programom na eksternom nivou interakcije;

Zadovoljiti princip „šest“, kada u jednoj traci menija nije uključeno više od 6 koncepata, od kojih svaki ne sadrži više od 6 opcija;

    održavati standardiziranu namjenu grafičkih objekata i, ako je moguće, njihovu lokaciju na ekranu.

U objektno orijentiranom programiranju bavimo se klasama i objektima. Objekti su kompozitni tipovi podataka: oni kombiniraju više vrijednosti u jednu jedinicu i omogućavaju nam da zapišemo i pohranimo te vrijednosti po imenu. Drugim riječima, objekt je neuređena kolekcija svojstava, od kojih svako ima ime i vrijednost. Imenovane vrijednosti sadržane u objektu mogu biti ili primitivni tipovi, kao što su brojevi ili nizovi, ili drugi objekti.

Prilikom razvoja nekonzolnih aplikacija, glavni koncept je Forma.

Obrazac je kontejner za hosting kontrola okoline dizajna.

Svojstva - mogućnost pristupa informacijama pohranjenim u ovom elementu.

Metode su skup radnji koje objekt može izvršiti.

Događaj je akcija koju objekt prepoznaje (na primjer, klik mišem, pritisak na tipku), za koju se može programirati odgovor, tj. odgovor objekta na događaj.

Posljednje ažuriranje: 26.05.2019

U Xamarin.Forms, vizuelni interfejs se sastoji od stranica. Stranica je objekat klase Page , zauzima ceo prostor ekrana. To je ono što vidimo na ekranu mobilni uređaj je stranica. Aplikacija može imati jednu ili više stranica.

Stranica prihvata jedan od kontejnera izgleda kao sadržaj, koji zauzvrat sadrži standardne vizuelne elemente kao što su dugmad i tekstualna polja, kao i druge elemente izgleda.

Uzmimo HelloApp projekat kreiran u prethodnoj temi (ili kreiramo novi). Prema zadanim postavkama, cijeli interfejs je kreiran u klasi App, koja se nalazi u datoteci App.xaml.cs i predstavlja trenutnu aplikaciju:

Njegov zadani kod je:

Korišćenje sistema; koristeći Xamarin.Forms; koristeći Xamarin.Forms.Xaml; imenski prostor HelloApp ( javna djelomična klasa App: Aplikacija ( public App() ( InitializeComponent(); MainPage = new MainPage(); ) zaštićeno nadjačavanje void OnStart() ( // Rukovanje kada se vaša aplikacija pokrene ) zaštićeno nadjačavanje void OnSleep() ( / / Rukovati kada vaša aplikacija spava ) zaštićeno nadjačavanje void OnResume() ( // Rukovanje kada se vaša aplikacija nastavlja ) ))

Klasa App počinje s konstruktorom, gdje se prvo poziva metoda InitializeComponent(), koja inicijalizira objekt, a zatim se postavlja svojstvo MainPage. Kroz ovo svojstvo postavlja se klasa App početna stranica aplikacije. U ovom slučaju, definirana je klasom HelloApp.MainPage, koja je klasa definirana u datotekama MainPage.xaml i MainPage.xaml.cs.

Ali ovaj put nije jedini. Xamarin.Forms vam omogućava da kreirate vizuelni interfejs bilo koristeći C# kod ili deklarativno koristeći xaml jezik, sličan html-u, ili kombinaciju ovih pristupa.

Kreiranje interfejsa iz C# koda

Dodajmo običnu C# klasu HelloApp projektu, koji ćemo nazvati StartPage.

I definirajte sljedeći sadržaj u ovoj klasi:

Korištenje Xamarin.Forms; imenski prostor HelloApp ( klasa StartPage: ContentPage ( public StartPage() ( Zaglavlje oznake = new Label() ( Text = "Pozdrav iz Xamarin Forms" ); this.Content = zaglavlje; ) ))

Ova klasa predstavlja stranicu, tako da nasljeđuje klasu ContentPage. Konstruktor kreira oznaku sa tekstom, koji se postavlja kao sadržaj stranice (this.Content = header).

Da biste označili glavnu stranicu kao početna stranica, promijenite klasu aplikacije:

Korištenje Xamarin.Forms; imenski prostor HelloApp ( javna djelomična klasa App: Aplikacija ( public App() ( InitializeComponent(); MainPage = new StartPage(); ) zaštićeno nadjačavanje void OnStart() ( // Rukovanje kada se vaša aplikacija pokrene ) zaštićeno nadjačavanje void OnSleep() ( / / Rukovati kada vaša aplikacija spava ) zaštićeno nadjačavanje void OnResume() ( // Rukovanje kada se vaša aplikacija nastavlja ) ))

Svojstvo MainPage sada ukazuje na novokreiranu početnu stranicu.

Također je vrijedno napomenuti da Visual Studio ima gotov predložak za dodavanje novih klasa stranica s najjednostavnijim kodom. Dakle, da biste dodali novu stranicu, morate odabrati predložak stranice sa sadržajem (C#) kada dodajete novi element:

Ova klasa se dodaje glavnom projektu rješenja (u ovom slučaju to je HelloApp).

Dodata klasa stranice će imati sljedeći kod:

Korišćenje sistema; koristeći System.Collections.Generic; koristeći System.Linq; koristeći System.Reflection.Emit; koristeći System.Text; koristeći Xamarin.Forms; imenski prostor HelloApp (javna klasa Stranica1: ContentPage (javna stranica1() (Sadržaj = novi StackLayout ( Djeca = (nova oznaka (Tekst = "Zdravo stranica") ) ); ) ))

Ova klasa će također naslijediti osnovnu klasu ContentPage i imat će gotovo istu organizaciju kao i klasa MainPage kreirana iznad.

I također u klasi aplikacije, ovu stranicu možemo postaviti kao početnu:

Korištenje Xamarin.Forms; imenski prostor HelloApp ( javna djelomična klasa App: Aplikacija ( public App() ( InitializeComponent(); MainPage = nova stranica1(); ) //........... ) )

5

Napravio sam mnogo različitih sekcija Nintendo DS GUI sistema kao što su dugmad, okviri za tekst i potvrdni okviri, ali mi je potreban način da sakrijem ove klase u jednoj Gui klasi tako da mogu da nacrtam sve na ekranu odjednom i proverim sve dugmad odjednom da proverite da li je neko dugme pritisnuto. Moje pitanje je koji je najbolji način da se sve klase (poput dugmadi i okvira za tekst) organizuju u jednu GUI klasu?

Evo jednog načina na koji sam razmišljao, ali mi se čini da nije u redu:

Uredi: Koristim C++.

Class Gui ( public: void update_all(); void draw_all() const; int add_button(Button *button); // Vraća id gumba void remove_button(int button_id); private: Button *buttons; int num_buttons; )

Ovaj kod ima nekoliko problema, ali samo sam želio da vam dam ideju o tome šta želim.

  • 5 odgovora
  • sortiranje:

    Aktivnost

2

Ovo pitanje je vrlo slično onome koje sam namjeravao postaviti, samo što je moje za Sony PSP programiranje.

Nešto sam tražio neko vrijeme, konsultovao sam neke knjige i VTM-ove, i do sada je ovo gruba ideja o jednostavnim sistemima korisničkog interfejsa.

Klasa uiElement() ( ... virtualna void Update() = 0; virtualna void Draw() = 0; ... ) klasa uiButton() public: uiElement ( ... virtualna void Update(); virtualna void Draw() ; ... ) class uiTextbox() public: uiElement ( ... virtual void Update(); virtual void Draw(); ... ) ... // Drugi elementi korisničkog interfejsa klasa uiWindow() ( ... void Update (); void Draw(); void AddElement(uiElement *Element); void RemoveElement(uiElement *Element); std::list elementi; ... ) void uiWindow::Update() ( ... za (list ::iterator it = Elements.begin(); it != Elements.end(); it++) it->Update(); ... ) void uiWindow::Draw() ( ... za (list ::iterator it = Elements.begin(); it != Elements.end(); it++) it->Draw(); ... )

Princip je kreiranje prozora i ataktnih elemenata korisnički interfejs na njega i pozovite metode crtanja i ažuriranja iz odgovarajućih glavnih funkcija.

Još mi ništa ne radi, jer imam problema sa kodom za crtanje. Sa raznim API-jima na PC-u i PSP-u, tražim omotač koda za OpenGL i psp gu.

Nadam se da ovo pomaže.

0

Jedna korisna strategija koju treba imati na umu može biti kompozitni obrazac. Na niskom nivou, može vam omogućiti da lakše rukujete svim GUI objektima (i kolekcijama objekata) nakon što su kreirani. Ali ne znam ništa u vezi sa GUI dizajnom, tako da je jedno mesto za pronalaženje opšte inspiracije u izvornom kodu postojećeg projekta. WxWidgets je višeplatformski GUI sa pristupačnim izvorni kod. Sretno sa vašim projektom!

0

3

Za one koji su zainteresovani, evo mog open source GUI alata za DS sa BSD licencom:

Subject2k-ov odgovor je prilično dobar, ali bih ozbiljno preporučio da imate kod koji sadrži podređene elemente interfejsa u osnovnoj klasi uiElement. Ovo je uzorak koji sam pratio u Woopsieju.

Ako ti Ne podržavajući ovo u osnovnoj klasi, naići ćete na ozbiljne probleme kada pokušavate implementirati bilo šta složenije od okvira za tekst i dugmeta. Na primjer:

  • Trake tablice mogu se modelirati kao više dugmadi grupisanih pod jednim roditeljskim UI elementom koji pruža međusobnu ekskluzivnost odabira;
  • Grupe radija (s vremenom);
  • Trake za pomicanje mogu biti predstavljene kao klizač/element oluka i dugme gore/dole;
  • Scroll liste mogu biti predstavljene kao kontejner i nekoliko elemenata korisničkog interfejsa.

Takođe, vredi zapamtiti da DS ima procesor od 66 MHz i 4 MB RAM-a, koji se koristi i za skladištenje vašeg programa i za njegovo pokretanje (DS diskovi se učitavaju u RAM pre pokretanja). Zaista biste ga trebali smatrati ugrađenim sistemom, što znači da ne postoji STL. Uklonio sam STL iz Woopsija i uspio uštedjeti 0,5 MB. Nije mnogo prema desktop standardima, ali to je 1/8 ukupne dostupne DS memorije koju troši STL smeće.

Detaljno opisujem cijeli proces pisanja korisničkog interfejsa na svom blogu:

Uključuje opis dva algoritma koja sam smislio za ponovno crtanje ekrana, što je lukav dio stvaranja GUI-a (jedan samo razbija pravokutnike i pamti vidljiva područja, a drugi koristi BSP stabla, što je mnogo efikasnije i lakše za razumjeti), savjete za optimizaciju, itd. d.



Učitavanje...
Top