Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Vijesti
  • Kreiranje aplikacija sa grafičkim interfejsom. Kreiranje grafičkog interfejsa pomoću Qt C clr kreiranje grafičkog interfejsa

Kreiranje aplikacija sa grafičkim interfejsom. Kreiranje grafičkog interfejsa pomoću Qt C clr kreiranje grafičkog interfejsa

5

Napravio sam mnogo različitih sekcija GUI sistema za Nintendo DS, kao što su dugmad i tekstualna polja i okviri za potvrdu, ali mi je potreban način da sakrijem ove klase u jednoj Gui klasi tako da mogu da nacrtam sve na ekranu odjednom, i provjerite sva dugmad odjednom tako da provjerite da li je neko dugme pritisnuto. Moje pitanje je koji je najbolji način da se sve klase (poput dugmadi i tekstualnih polja) 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->Ažuriraj(); ... ) void uiWindow::Draw() ( ... za (list ::iterator it = Elements.begin(); it != Elements.end(); it++) it->Draw(); ...)

Princip je kreirati prozor i priložiti elemente korisničkog sučelja na njega, te pozvati metode renderiranja i ažuriranja iz odgovarajućih osnovnih funkcija.

Još mi ništa ne radi jer imam problema sa kodom za crtanje. Sa raznim API-jima na PC-u i PSP-u, gledam 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 uzorak. 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 šta je uključeno u GUI grafički dizajn interfejsa, tako da je jedno mesto za pronalaženje opšte inspiracije izvorni kod postojećeg projekta. WxWidgets je višeplatformski GUI sa dostupnim izvornim kodom. Sretno sa vašim projektom!

0

3

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

Odgovor Subject2k je prilično dobar, ali bih ozbiljno preporučio da kod koji sadrži podređene elemente interfejsa u osnovnoj klasi uiElement. Ovo je obrazac koji sam slijedio u Whoopsie.

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:

  • Paneli tabele se mogu modelirati kao više dugmadi grupisanih u jedan roditeljski element korisničkog interfejsa koji obezbeđuje međusobnu ekskluzivnost odabira;
  • Grupe radio stanica (s vremenom);
  • Trake za pomeranje mogu biti predstavljene kao klizač/element oluka i dugmad za gore/dole;
  • Scroll liste mogu biti predstavljene kontejnerom i nekoliko UI elemenata.

Takođe, vredi zapamtiti da DS ima procesor od 66MHz i 4MB 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 ga morate tretirati kao ugrađeni sistem, š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 sučelja na svom blogu:

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

Napomena: Proučavamo widgete - vizuelne elemente koji čine grafičko korisničko sučelje, njihov izgled, politiku veličine, veze signal-slot, elemente grafičkog interfejsa i njihovu upotrebu.

13.1 Widgeti

Widgeti su vizuelni elementi koji čine grafičko korisničko sučelje.

Primjeri widgeta:

  • Dugme (klasa QPushButton);
  • Oznaka(klasa QLabel);
  • Polje za unos (klasa QLineEdit);
  • Polje numeričkog brojača (klasa QSpinBox);
  • Traka za pomicanje (klasa QScrollBar).

Qt ima oko 50 gotovih klasa grafičkih elemenata dostupnih za upotrebu. Roditeljska klasa za sve widgete je klasa QWidget. Od njega su naslijeđena sva glavna svojstva vizualnih elemenata, koje ćemo pažljivo razmotriti. Počnimo da istražujemo načine za razvoj programa sa grafičkim interfejsom sa primerom.

Kreirajmo prazan projektni fajl. Pokrenite čarobnjak za projekte i odaberite stavku u odjeljku Projekti Drugi projekat. Zatim odaberite vrstu projekta Prazan Qt projekat. Dodajmo sadržaj u projektni fajl:

TEMPLATE = app #Qt moduli koje ćemo koristiti QT += widgeti #Dodajte widgets modul za rad sa widgetima (neophodan za Qt5). TARGET = widget#Naziv izvršne datoteke SOURCES += \ main.cpp

Sada napravimo jednostavan program sa prozorom u kojem ćemo prikazati natpis. Podesite veličinu prozora i tekst njegovog naslova, a takođe i font za natpis. Da biste to učinili, kreirajte datoteku main.cpp sa sljedećim sadržajem:

#include #include int main (int lArgc, char * lArgv ) ( //Kreirajte QApplication objekt koji inicijalizira i konfigurira prozorski program, //kontrolira njegovo izvršavanje pomoću QApplication petlje događaja lApplication (lArgc, lArgv); QLabel lLabel; //Kreirajte a widget - oznaka lLabel.setText ("Ja sam widget!"); //Postavite tekst za oznaku lLabel.setGeometry (200, 200, 300, 150); //Postavite dimenzije - položaj (x, y), širinu i visinu. Postavite tekst poravnanja lLabel.setAlignment (Qt::AlignHCenter | Qt::AlignVCenter); //Klasa QFont se koristi za postavljanje parametara fonta. //Odaberite porodicu fontova Arial Black i veličinu 12. QFont lBlackFont (" Arial Black", 12); lLabel. setFont (lBlackFont); //Postavite font za oznaku lLabel.show (); //Pozovite show() metodu da prikažete oznaku na ekranu. vratite lApplication.exec () ; //Pokreni program za izvršavanje exec() izvršava //obradu događaja petlje. Program čeka radnje korisnika i obrađuje ih.)

Kao što vidimo, elementi koji čine interfejse u Qt-u imaju svoju poziciju i veličinu - takozvanu "geometriju" - i na taj način zauzimaju odgovarajuću pravougaonu oblast na ekranu (vidi sliku 13.1). Također, svaki element ima postavke koje određuju njegovo ponašanje i izgled.


Rice. 13.1.

Da bi se stvorila struktura, widgeti su organizovani u hijerarhiju prema principu “dio – cjelina”. Svaki widget može sadržavati druge vidžete. Ovaj vizuelni element postaje "roditelj" (roditeljski widget) elemenata koje sadrži. Imajte na umu da takve odnose ne treba brkati sa nasljeđivanjem u C++ - odnosima između klasa u programu. Odnosi između widgeta su odnosi između objekata. Takvi odnosi dovode do nekoliko posljedica:

  • roditeljski element će biti odgovoran za brisanje podređenog elementa: ako se roditeljski widget izbriše, automatski će izbrisati sve podređene elemente;
  • roditeljski widget postavlja podređene vidžete unutar sebe, dijelovi podređenih widgeta koji se protežu izvan nadređenog bit će nevidljivi;
  • dio stanja roditeljskog vidžeta se prenosi na njegove potomke - ovo se odnosi na neka svojstva (vidljivost, aktivnost) i stilove koji se primjenjuju na vizualni element.

Widgeti koji nemaju nadređeni (widgeti najvišeg nivoa) pojavljuju se kao zasebni prozori u programu. Pogledajmo primjer. Nazovimo novi projekat ParentExample. Datoteka projekta će sadržavati uobičajene postavke za GUI projekat:

TEMPLATE = app TARGET = ParentExample QT += widgeti

Za widget koji ćemo koristiti kao glavni prozor, kreiraćemo novu klasu. Za ovo u kategoriji Fajlovi i klase Odaberimo odeljak C++ i izaberemo C++ klasu (vidi sliku 13.2).

Sljedeći korak je kreiranje nekoliko elemenata na prozoru. Da biste to učinili, otvorite datoteku parentwidget.cpp i promijenite kod konstruktora klase. Da biste prikazali elemente, samo ih kreirajte u konstruktoru klase i postavite ParentWidget kao nadređenog za njih. Parentwidget.cpp kod izgleda ovako:

#include " parentwidget.h " #include #include #include ParentWidget::ParentWidget (QWidget * roditelj) : QWidget (roditelj) ( //Kreirajte oznaku koja ukazuje na roditeljski widget - ovo, to jest, instanca klase ParentWidget. QLabel * lLabel=nova QLabel (ovo); //Pozicija u odnosu na gornji lijevi ugao roditeljskog widgeta. lLabel ->setGeometry (50, 0, 100, 30); lLabel ->setText (" TextLabel "); //Tekst na naljepnici. //Kreirajte dugme, postavite "roditelj", geometrija i tekst QPushButton * lPushButton = novi QPushButton (ovo); lPushButton->setGeometry (50, 50, 100, 30); lPushButton->setText (" PushButton"); "roditelj", geometrija i tekst QLineEdit * lLineEdit = new QLineEdit (ovo); lLineEdit ->setGeometry (50, 100, 100, 30); lLineEdit ->setText (" LineEdit "); lLineEdit ->selectAll (); // Odaberite tekst u polju za unos (samo na primjer) // Konačno promijenite veličinu roditeljskog widgeta setGeometry (x (), y (), 300, 150); //i postavite tekst naslova prozora setWindowTitle (" roditelj widgetExample " ); )

Pošto je roditeljski element ParentWidget, oznaka (QLabel), dugme (QPushButton) i tekstualno polje (QLineEdit) su unutar njega. Položaj podređenih widgeta je postavljen u odnosu na gornji lijevi ugao oca. To možete lako provjeriti promjenom veličine i položaja prozora našeg programa. Obratite pažnju na to kako smo kreirali elemente korisničkog interfejsa na hrpi koristeći novi operator. Ovo osigurava da elementi ne budu uklonjeni nakon što konstruktor ParentWidget završi.

Odmah ću reći da mi je C++ omiljeni jezik, pišem njime gotovo „od djetinjstva“ i neću poreći njegovu važnost kao jednog od najboljih jezika za pisanje programa za bilo koju svrhu. Štaviše, ne vidim smisao u pokretanju još jednog holivara ili upoređivanju "pokazivača". Ovaj članak je samo opis lošeg iskustva sa jezikom, objašnjavajući neke njegove aspekte čije će poznavanje pomoći drugim programerima u budućnosti.

Jednog dana sam naišao na biblioteku klasa GUI u razvoju. Iz perspektive C++-a, tačnije njegovih klasa, instanci i hijerarhija, jezik izgleda neverovatno blizak konceptu GUI kontrola, posebno elementima kao što su vidžeti, prozori klasa i podprozori. OO modeli C++ i prozorskog sistema su ipak različiti. C++ je trebao biti "statičan" jezik sa pokrivenošću tokena, statičkom provjerom tipa i hijerarhijama definiranim u vrijeme kompajliranja. Prozori i njihovi objekti su, s druge strane, dinamične prirode, obično žive izvan granica pojedinačne procedure ili bloka s kojim su kreirani; Hijerarhije vidžeta su uglavnom određene rasporedom, vidljivošću i tokovima događaja. Osnove grafičkog korisničkog interfejsa, kao što su dinamički i geometrijski prozori i hijerarhije kontrola i tokovi događaja, nisu direktno podržani C++ sintaksom ili njenom semantikom. Dakle, ove funkcije moraju biti reproducirane u C++ GUI kodu. To dovodi do dupliciranja grafičkih alata ili funkcionalnosti upravitelja prozora, naduvavanja koda i primorani smo da napustimo mnoge „jake“ karakteristike C++-a (na primjer, provjeru tipa u vrijeme kompajliranja). Članak pruža nekoliko jednostavnih primjera C++/GUI „ne-zglobova“.

Nemojte kreirati konstruktore (ili ih barem nemojte koristiti)

Kada rezultujuća klasa nadjača virtuelnu metodu roditeljske klase, imajte na umu da nadjačavanje ne stupa na snagu dok je konstruktor osnovne klase pokrenut. Ovo je posebno neugodno kada objekti traže widgete koji odgovaraju na GUI događaje. Pretpostavimo da je klasa Basic_Window bio je namijenjen za stvaranje vanile crno-bijelog prozora na ekranu:

Class Basic_Window (
javno:
Basic_Window(Rect rect) (gt_create_window(rect,visible, this); )
virtualna void handle_create_event() (set_background(WHITE); )
};

Evo gt_create_window() odgovoran je za pozivanje na niskom nivou glavnih grafičkih alata (npr. xvt_win_create()). Ova funkcija dodeljuje prostor za podatke instrumentacije, obaveštava upravitelja prozora, registruje ovaj objekat kao slušalac događaja i u gornjem primeru inicira grafički izlaz u prozor na ekranu.
Recimo da želimo instancirati Basic_Window, ali sa crvenom pozadinom. Obično, da biste promijenili ponašanje klase, morate izdvojiti i nadjačati odgovarajuće virtualne metode. pišemo:

Klasa RedWindow: javni Basic_Window (
virtualna void handle_create_event() (set_background(RED); )
javno:
RedWindow(Rect rect) : Basic_Window(Rect rect) ()
};
RedWindow red_window(default_rect);

Ali red_windowće izgledati bijelo, a ne crveno! Stvoriti RedWindow, prvo se mora kreirati nadređeni objekat. Nakon završetka Basic_Window::Basic_Window(), virtuelne tabele RedWindow stupiti na snagu, metoda handle_create_event() postaje neprimjenjiv i konstruktor RedWindow() izvedeno. Konstruktor Basic_Window() registruje objekat grafičkog kompleta alata, koji trenutno počinje slati događaje objektu (na primjer, CREATE događaj). Konstruktor Basic_Window() još nije završen (ovo nije zagarantovano), tako da zaobiđena virtuelna metoda još nije na mestu. Na ovaj način će se obraditi događaj CREATE Basic_Window::handle_create_event(). Virtuelni stolovi RedWindow klase će se kreirati tek kada je osnovna klasa u potpunosti izgrađena, odnosno kada je prozor već na ekranu. Promjena boje prozora u ovoj fazi će rezultirati dosadnom greškom.

Postoji jednostavno rješenje: spriječite svaki konstruktor da registruje objekt grafičkog kompleta alata. Rukovanje događajima će biti strukturirano tako da odloži kraj inicijalizacije na izvedene klase. Primamljivo je razmišljati o widgetima na ekranu kao o „licu“ GUI objekta aplikacije u memoriji. Kao što gornji primjer pokazuje, ovu vezu između ekrana i C++ objekta nije tako lako implementirati: oni se rađaju odvojeno.

Nema sintaktičkih sredstava za prebacivanje događaja

Pretpostavimo da biblioteka klasa uključuje GUI klasu PictWindow koji prikazuje fotografiju u prozoru:

Class PictWindow (
Picture picture;
javno:
virtualna void repaint() ( gt_draw_pict(slika); )
...
};

Željeli bismo prekriti mali pravougaonik u određenom području slike. U tu svrhu možemo pokušati kreirati podklasu PictWindow:


Rect rect;
virtualna void repaint() (gt_draw_rect(rect); )
};

Nažalost, kada instanciramo OvWindow, tada ćemo vidjeti samo pravougaonik u praznom prozoru, a ne sliku. Od trenutka OvWindow::repaint() nadjačava PictWindow::repaint(), posljednja funkcija neće biti pozvana kada treba nacrtati prozor. Morali smo implementirati OvWindow dakle:

Klasa OvWindow: javni PictWindow (
Rect rect;
virtualna void repaint() ( PictWindow::repaint(); gt_draw_rect(rect); )
javno:
OvWindow(void) : PictWindow() ()
};

Konstruktor OvWindow predstavljen je kako bi se naglasilo da je metoda OvWindow::repaint() mora biti odloženo u superklasu, baš kao što to rade konstruktori. U stvari, konstruktor izvedenog objekta poziva konstruktor odgovarajućeg objekta od početka. repaint() treba odložiti na svog roditelja: metodu u osnovnoj klasi koja ga nadjačava.

Zaključak: Loša C++/GUI kompatibilnost

C++ je dizajniran kao "statički" jezik:

  • sa praćenjem tokena
  • provjera statičkih tipova
  • sa statičnim hijerarhijama klasa
  • bez odvoza smeća
  • sa sistemom poruka bez definiranih hijerarhija vremena kompajliranja

GUI objekti:

  • karakteriziraju dinamični objekti, a često i jedinstveni
  • imaju tendenciju da žive daleko izvan granica u kojima su stvorene
  • hijerarhije su uglavnom definirane tokovima događaja i njihovim rasporedom, a ne nasljeđivanjem klasa
  • hijerarhije se izgrađuju i uništavaju u toku rada, često kao odgovor na nepredvidive radnje korisnika

C++ nije dizajniran da podržava dinamičku razmjenu poruka i sigurnost prijenosa (osim uz izuzetke). Sve to dovodi do dupliciranja grafičkih alata i funkcionalnosti upravitelja prozora, proliferacije koda, upotrebe nesigurnih funkcija i napuštanja mnogih prednosti C++-a.

zaključci

Naravno, sve ove „zamke“ nisu fatalne. C++ je univerzalan i moćan jezik i stoga je sposoban da izrazi sve moguće algoritme proračuna. Stoga, ako aplikacija zahtijeva dinamičke značajke poput onih koje se nalaze u Tcl/Tk, Shema/Tk, Postscript i slično; Koristeći C++, uvijek možete učiniti nešto slično njihovom primjeru. S druge strane, zašto ne koristiti jezik u kojem su prisutne sve ove karakteristike?

C++ je jedan od najmoćnijih i najpopularnijih programskih jezika. Svakodnevno se na njemu pišu stotine aplikacija, često koristeći GUI. Međutim, rad sa grafikom nije uvijek zgodan za programera; u ovom slučaju se koriste gotove grafičke biblioteke. Oni će razvoj grafičkog dijela aplikacija učiniti što bržim i praktičnijim.

SFML

Qt

Cross-platformska biblioteka Cocos2D-X dizajnirana je da pojednostavi razvoj mobilnih igara. Podržava sve iste platforme kao Qt. Među prednostima vrijedi istaknuti pristupačnost, jednostavnost korištenja i stvaranje zasebnog dizajnera igara na temelju biblioteke Cocos Creator. Na listi igara baziranih na motoru nalazi se svjetski poznati BADLAND, koji radi na svim dostupnim platformama.

Nešto drugo

Ako trebate raditi s grafikom i animacijom u velikom obimu prilikom kreiranja igre, onda je bolje koristiti Unity umjesto Cocos2D-X. Unity nudi besprekornu integraciju sa alatima kao što su Photoshop, Maya ili Blender. U Cocos2D-X, sva grafika se dodaje eksterno i referencira iz koda.

U RuNetu nema lekcija o ovoj biblioteci, ali postoji odličan kurs od programera na engleskom.

Juce

Možda jedna od najpoznatijih grafičkih biblioteka. GTK+ je grafički okvir koji se široko koristi u mnogim sistemima. Prvobitno je zamišljen da bude komponenta GIMP-a, ali u 20 godina otkako je objavljena prva stabilna verzija našla je svoj put u stotine drugih aplikacija.

Sada je GTK+ punopravni grafički okvir, koji nije inferioran u odnosu na isti QT. Podržava različite programske jezike i nastavlja da se razvija.

Nešto drugo

Svojevremeno je biblioteka kreirana kao alternativa Qt-u, koji je bio plaćen. GTK+ je jedan od rijetkih okvira koji podržava jezik C. Biblioteka je cross-platformska, ali postoji mišljenje da programi na Linuxu izgledaju prirodnije nego na Windows-u ili Mac-u (GTK+ je dobro podržan čak i na KDE-u). Zanimljivo je da je zbog nekih problema sa više platformi, Wireshark prešao na Qt.

Primjer prvog programa možete pronaći na Wikipediji.

Ostale zanimljive članke o C++-u možete pronaći ovdje.

Zaključak

Gore su najpopularnije tehnologije za rad sa GUI ne samo u C++, već ponekad i na drugim jezicima (na primjer, Qt i GTK+). Međutim, uvijek biste trebali uzeti u obzir karakteristike određene tehnologije. Zapišite listu funkcija vaše aplikacije, ponovo pročitajte opise svih biblioteka i okvira i tek nakon toga odaberite ono što zaista najbolje odgovara projektu.

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 aplikacije sa grafičkim korisničkim interfejsom u microsoft visual studiju 2010

Nastavno-metodički priručnik

za laboratorijsku i praktičnu nastavu

sa studentima smera

230100 (03/09/01) “Informatika i računarska tehnologija”

Nastavni priručnik sadrži teorijske podatke, zadatke za praktičan i laboratorijski rad na predmetu „Programiranje“.

Priručnik je namenjen nastavnicima discipline, kao i studentima smera: 230100 „Informatika i računarstvo“.

Sastavio: Gabdullina A.A., art. nastavnik katedre VTIK

Druzhinskaya E.V., Art. nastavnik katedre VTIK

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

1.Teorijske informacije 4

1.1. Osnovni koncepti 4

1.2. Predstavljamo Windows Form aplikaciju u Microsoft Visual Studio 2010 4

1.3. Kontrolni obrazac 7

1.5. MessageBox 9 funkcija

1.6. Kontrola TextBox 10

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

2.1. Struktura evaluacije obavljenog rada 12

2.2. Postupak izvođenja praktičnog rada 12

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

3.1. Procedura za izvođenje laboratorijskih radova 16

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

3.3. Individualni zadaci 19

3.4. Zadatak 2. Obrada dvodimenzionalnih nizova 21

3.5. Individualni zadaci 27

  1. Teorijske informacije

  1. 1.1. Osnovni koncepti

Automatizacija informacionih procesa trenutno se javlja prvenstveno kao razvoj softverske aplikacije sa grafičkim korisničkim interfejsom (GUI) koji upravlja tokovima podataka.

Grafičko korisničko sučelje (GUI) je sistem alata za interakciju korisnika sa uređajem, zasnovan na predstavljanju svih sistemskih objekata i funkcija dostupnih korisniku u obliku grafičkih komponenti ekrana (prozori, dugmad, trake za pomicanje itd.) .

Najčešće se elementi interfejsa u GUI implementiraju na osnovu metafora i prikazuju njihovu namenu i svojstva, što neobučenim korisnicima olakšava razumevanje i savladavanje programa. Na taj način korisnik radi sa ekranskim obrascima koji sadrže kontrolne objekte i alatne trake sa akcionim dugmadima za obradu.

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

Podržati informatičku tehnologiju rada korisnika sa softverskim proizvodom;

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

Zadovoljiti princip „šest“, kada jedna linija menija ne sadrži 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 zabilježimo 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 postavljanje kontrola razvojnog okruženja.

Svojstva - mogućnost pristupa informacijama koje su pohranjene 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. reakcija objekta na događaj.

Najbolji članci na ovu temu