Programimi në ndërfaqe grafike c. Krijimi i një GUI me Qt

Diten e mire! Në këtë tutorial, ne do të krijojmë aplikacionin tuaj të parë GUI në MS. studio vizuale. Do të jetë një lloj "Hello World" për aplikacione grafike. Unë do ta them menjëherë atë Përdorimi i Windows Format nuk është mënyra e vetme për programuesit C# për të krijuar aplikacione grafike (aplikacione me një ndërfaqe grafike të përdoruesit), por është një vend i mirë për të filluar mësimin. Dhe kështu, ne nisim Visual Studio.

Nisur? Pastaj në biznes! Shkojmë në menunë kryesore dhe zgjedhim artikullin "File - New - Project", siç tregohet në figurën më poshtë.

Në dritaren që shfaqet:

  • në anën e majtë, zgjidhni "Templates - Visual C # - Windows";
  • në zonën kryesore, zgjidhni elementin "Windows Forms Application";
  • në pjesën e poshtme të dritares, shkruani emrin e projektit dhe tregoni vendndodhjen e tij në disk.

Në përgjithësi, siç tregohet në figurën më poshtë.

A e keni specifikuar atë që ju nevojitet? Pastaj klikoni në butonin "OK". Tani duhet të shihni diçka të tillë (zonat kryesore janë theksuar me drejtkëndësha):

Në imazhin e mësipërm, kam etiketuar zonat kryesore: zonën e projektuesit (lart majtas), zonën e eksploruesit të zgjidhjeve (lart djathtas) dhe zonën e vetive (poshtë djathtas). Këto janë fushat me të cilat do të punojmë më shpesh.

Në zonën e projektuesit, tani ekziston një "formë" e zbrazët, kjo është e ashtuquajtura dritare, në këtë rast, dritarja kryesore e programit tonë. Zona e pronave shfaq vetitë e elementit të zgjedhur në projektues, në këtë rast, forma jonë, por zona e eksploruesit të zgjidhjeve përmban skedarë projekti, duke përfshirë ato që lidhen me format (dritaret) e programit. Dhe tani, le të ndryshojmë pak formën tonë dhe të ekzekutojmë këtë aplikacion të parë.

Për ta bërë këtë, zgjidhni formularin në projektues (për këtë, thjesht mund të klikoni me të majtën në formë) dhe shkoni te blloku i vetive, në të cilin gjejmë rreshtin "Tekst" (fjala është tekst, ne po kërkojmë atë në kolonën e majtë), siç tregohet në figurën më poshtë.

Vetia "Teksti" i formularit kryesor të aplikacionit

Ju lutemi vini re se kolona e majtë tregon emrin (emri i pronës), dhe kolona e djathtë tregon vlerën e saj.

Në këtë rast, kemi të bëjmë me një veçori teksti dhe vlera e tij shfaqet në titullin e dritares, kështu që le të vendosim diçka tonën atje, për shembull, diçka si: "Dritarja kryesore", siç tregohet në figurën më poshtë:

Tani, ju mund ta ndërtoni projektin dhe ta ekzekutoni atë. Për ta bërë këtë, shkoni te menyja kryesore dhe zgjidhni "Build - Build Solution". Dhe më pas nisim aplikacionin, për këtë zgjedhim artikullin "Debug - Run pa debugging" në menunë kryesore. Si rezultat, duhet të shihni dritaren e mëposhtme.

Në mësimin tjetër, ne do të shikojmë punë e thjeshtë me dizajnerin e formularit dhe vendosjen e elementeve GUI, dhe ky mësim përfundoi, ne krijuam aplikacionin e parë grafik, e ndërtuam dhe e lëshuam në treg.

Pershendetje te gjitheve. Në mësimet e mia të mëparshme, fola për krijimin e aplikacioneve të konsolës në mjedisin Borland C++ Builder. Duke u nisur nga ky mësim, ne do të mësojmë C++ duke përdorur si shembull aplikacionet grafike. Kush dëshiron të mësojë se si të krijojë tastierë. Mund të lexojë librin "Arti i ndërtimit të aplikacioneve të konsolave ​​në C++". Aplikimi ynë i parë do të jetë një program që shfaq një numër të rastësishëm. Ne hapim borlandyayu, thjesht mos krijoni një aplikacion konsol. Pas nisjes, forma e mëposhtme do të shfaqet në ekran:

Në krye do të ketë një shirit veglash:

Në të djathtë, Inspektori i Objekteve dhe Lista e Formave:

Komponentët (ndryshe nga BASIC) tashmë janë të ndarë në skeda. Me emër, nuk është e vështirë të merret me mend se çfarë lloj përbërësish vendosen në skedë. Hapni skedën standarde dhe vendosni përbërësit në formularin si i imi:

Butoni do të emërtohet Button1. Ajo duhet të ndryshohet. Në dritaren e poshtme majtas të Borland, shfaqen vetitë e përbërësve; ato duhet të ndryshohen në tonat:

Në butonin Caption (Mbishkrim) ndryshoni në Generate

Për etiketën Label1, ndryshoni tiparin Caption në Number

Në Edit1, vetia Tekst (teksti në vetë redaktimi) thjesht fshihet.

Pas këtyre manipulimeve, forma do të duket si e imja:

Ne kemi përfunduar me stilin vizual, meqë ra fjala, shumica e pronave në Borlyad duken si BASIC ose Delphi. Eksperimentoni me ta.

Tani le të flasim për ngjarjet. Çdo komponent ka ngjarje, ato përmbajnë kod që do të ekzekutohet kur të arrihen kushte të caktuara. Për shembull, për një buton, kodi në ngjarjen Click do të ekzekutohet kur klikojmë mbi të, etj.

Sot do të përdorim vetëm ngjarjen Kliko. Klikoni dy herë në butonin dhe futuni në dritaren e kodit:

Ngjarja Kliko për butonin u krijua automatikisht. Kodi, si një aplikacion konsol, vendoset midis mbajtëseve kaçurrelë. Ne shkruajmë kodin:

Void __fastcall TForm1::Button1Click(TObject *Dërguesi) (dyfish aaa; //Vendosni numrin e gjeneruar nga procesori këtu Numërimi i vargjeve; //Shkruani të njëjtin numër, por reduktohet në një varg të rastësishëm; //Kjo është e nevojshme në mënyrë që numrat nuk përsëriten aaa=rastësisht (34)*43646; //Gjeneroni çdo numër count=FloatToStr (aaa); //Përkthejeni numrin në një varg duke përdorur funksionin FloatToString Edit1->Text=count; //Nxjerrja e një variabli vargu në dritaren e tekstit)

Algoritmi është i thjeshtë, ne deklarojmë një ndryshore për të ruajtur një numër thyesor në të dhe një ndryshore për numrin në formë vargu. Fakti është se numri i krijuar menjëherë nuk mund të shfaqet në një kuti teksti (do të ketë një gabim. Pritej një tekst dhe u mor një numër), kështu që duke përdorur funksionin FloatToStr ne e përkthejmë numrin në një varg dhe e shfaqim atë në një kuti teksti. Për dalje, ne e kthejmë (duke përdorur shenjën -> (e ngjashme me një pikë në vb)) te vetia e tekstit Edit1 dhe e shfaqim tekstin atje. Kjo është e gjitha për tani.

Meqë ra fjala, një pyetje plotësuese: kush shumohet më shpejt viruset kompjuterike, Kinez apo lepuj?


Komentet ()

Vitay

artyomka

"Randomize; //Kjo është e nevojshme në mënyrë që numrat të mos përsëriten." Unë ende vazhdoj të përsëris. cfare te bej

Andrey

Ka 2 opsione 1-përdorni "randomize();" ose në rreshtin 6 komplikoni funksionin p.sh. shtoni më shumë sekonda

Andrey

"sekonda" ose rezultati i shtimit të dy numrave pseudo të rastësishëm të pjesëtuar me sekonda - sa më shumë faktorë, aq më i paparashikueshëm është numri.

artyomka Alexey (alex13sh)

rastësoj
kjo në mënyrë që numrat të mos përsëriten kur programi është i ndezur
mirë, kjo është. aktivizoni programin, shtypni butonin disa herë
1)5
2)47
3)86
ky jam unë në numër të plotë
mirë, nëse e fikni programin dhe e ndizni përsëri, kur butoni të shtypet në mënyrë serike, do të ketë të njëjtët numra me të njëjtat sekuenca
kjo është pa rastësi, por kjo nuk do të hiqet

Dhe çfarë përsëritet në këtë mënyrë
1)3
2)69
3)1
4)3
5)8
6)1
KJO NUK ZBATON PËR RAPORTIMIN E RAPORTIT
për të shmangur këtë Andrey tashmë është përgjigjur))

Begzod

Unë kam c++.net vizual në kompjuterin tim. Unë nuk mund të gjej tekste shkollore, kode burimore për të. Ndihmoni pzhs.

Ali05

Pashë në librari një libër shkollor për Visual C ++.Net "Nikita Kultin Bazat e Programimit në Microsoft Visual C++ 2010", ai thjesht tregon se si të krijoni aplikacionet grafike nën Windows (WinForms).

Coolhacker Nintendo

Pyes veten se cila është "e keqja" e tij?

Coolhacker

Në mungesë të aftësisë për të paraqitur siç duhet materialin dhe duke ju mësuar, zotërinj, me një stil të keq programimi, emrat e variablave/funksioneve të transliteruara a la.

Eduard Coolhacker

Ministria e Arsimit dhe Shkencës e Federatës Ruse

Institucioni Arsimor Buxhetor Federal i Shtetit

arsimin e lartë profesional

“VAJI SHTETËROR UFA

UNIVERSITETI TEKNIK"

Departamenti i Shkencave Kompjuterike dhe Inxhinierisë Kibernetike

Krijimi i një aplikacioni GUI në Microsoft Visual Studio 2010

Mjete mësimore

për klasa laboratorike dhe praktike

me nxënësit e drejtimit

230100 (09.03.01) "Informatikë dhe Inxhinieri Kompjuterike"

Mjeti mësimor jep informacion teorik, detyra për punë praktike dhe laboratorike të lëndës “Programim”.

Manuali u drejtohet mësuesve të disiplinës, si dhe studentëve të drejtimit: 230100 “Informatikë dhe Inxhinieri Kompjuterike”.

Përpiluar nga: Gabdullina A.A., Art. pedagog në departament VTIK

Druzhinskaya E.V., Art. pedagog në departament VTIK

Recensent: Filippov V.N., Ph.D., Profesor i Asociuar i Departamentit. VTIK.

1. Informacion teorik 4

1.1. Konceptet bazë 4

1.2. Njohja me aplikacioni Windows Formulari në Microsoft Visual Studio 2010 4

1.3. Kontrolli i formularit 7

1.5. Funksioni MessageBox 9

1.6. Kontrolli i kutisë së tekstit 10

2.Detyrë praktike. Hyrje në aplikacionin Windows Form në Microsoft Visual Studio 2010 12

2.1. Struktura e vlerësimit për punën e përfunduar 12

2.2. Procedura e kryerjes së punës praktike 12

3. Puna laboratorike. Zhvillimi i aplikacionit në Microsoft Visual Studio 2010 16

3.1. Urdhri i laboratorit 16

3.2. Detyra 1. Tabela e një funksioni dhe llogaritja e vlerave të tij në intervalin e specifikuar me një hap të caktuar 16

3.3. Detyra individuale 19

3.4. Detyra 2. Përpunimi vargje dydimensionale 21

3.5. Detyra individuale 27

  1. Informacion teorik

  1. 1.1. Konceptet bazë

Automatizimi i proceseve të informacionit aktualisht përfaqësohet, para së gjithash, nga zhvillimi i një aplikacioni softuerik me një ndërfaqe grafike të përdoruesit (GUI) që menaxhon rrjedhat e të dhënave.

Ndërfaqja grafike e përdoruesit (GUI) është një sistem mjetesh për ndërveprimin e përdoruesit me një pajisje të bazuar në prezantimin e të gjitha objekteve dhe funksioneve të sistemit në dispozicion të përdoruesit në formën e komponentëve grafikë të ekranit (dritare, butona, shirita lëvizës, etj.) .

Më shpesh, elementët e ndërfaqes në GUI zbatohen në bazë të metaforave dhe shfaqin qëllimin dhe vetitë e tyre, gjë që e bën më të lehtë për përdoruesit e papërgatitur të kuptojnë dhe zotërojnë programet. Kështu, puna e përdoruesit kryhet me format e ekranit që përmbajnë objekte kontrolli dhe shirita veglash me butona veprimi për përpunim.

Një ndërfaqe standarde grafike e përdoruesit duhet të plotësojë një sërë kërkesash:

Ruajtja e teknologjisë së informacionit të punës së përdoruesit me produktin softuer;

Përqendrohuni te përdoruesi përfundimtar i cili komunikon me programin në nivelin e jashtëm të ndërveprimit;

Përmbushni parimin "gjashtë", kur jo më shumë se 6 koncepte përfshihen në një shirit menuje, secila prej të cilave përmban jo më shumë se 6 opsione;

    të mbajë një qëllim të standardizuar të objekteve grafike dhe, nëse është e mundur, vendndodhjen e tyre në ekran.

Në programimin e orientuar nga objekti, ne merremi me klasa dhe objekte. Objektet janë lloje të të dhënave të përbëra: ato kombinojnë vlera të shumta në një njësi të vetme dhe na lejojnë t'i shkruajmë dhe ruajmë ato vlera me emër. Me fjalë të tjera, një objekt është një koleksion i parregulluar i vetive, secila me një emër dhe një vlerë. Vlerat e emërtuara të përfshira në një objekt mund të jenë ose lloje primitive, të tilla si numra ose vargje, ose objekte të tjera.

Kur zhvilloni aplikacione jo të konsolës, koncepti kryesor është Forma.

Një formular është një enë për pritjen e kontrolleve të mjedisit të projektimit.

Karakteristikat - aftësia për të hyrë në informacionin e ruajtur në këtë element.

Metodat janë një grup veprimesh që një objekt mund të kryejë.

Një ngjarje është një veprim i njohur nga një objekt (për shembull, një klikim i mausit, një shtypje tasti), për të cilin mund të programohet një përgjigje, d.m.th. reagimi i objektit ndaj ngjarjes.

Përditësimi i fundit: 26.05.2019

Në Xamarin.Forms, ndërfaqja vizuale përbëhet nga faqe. Faqja është një objekt i klasës Page , ajo zë të gjithë hapësirën e ekranit. Kjo është ajo që ne shohim në ekran pajisje celulareështë një faqe. Një aplikacion mund të ketë një ose më shumë faqe.

Faqja pranon një nga kontejnerët e paraqitjes si përmbajtje, e cila nga ana tjetër përmban elemente standarde vizuale si butonat dhe fushat e tekstit, si dhe elementë të tjerë të paraqitjes.

Le të marrim projektin HelloApp të krijuar në temën e mëparshme (ose të krijojmë një të re). Si parazgjedhje, e gjithë ndërfaqja krijohet në klasën App, e cila ndodhet në skedarin App.xaml.cs dhe përfaqëson aplikacionin aktual:

Kodi i tij i paracaktuar është:

Përdorimi i Sistemit; duke përdorur Xamarin.Forms; duke përdorur Xamarin.Forms.Xaml; hapësira e emrave HelloApp ( Aplikacioni i klasës së pjesshme publike: Aplikacioni ( Aplikacioni publik() ( InitializeComponent(); MainPage = MainPage i ri(); ) i mbrojtur nga anulimi i pavlefshëm OnStart() ( // Trajto kur fillon aplikacioni yt ) i mbrojtur nga anulimi void OnSleep() ( / / Trajto kur aplikacioni yt fle ) Mbrojtja e anulimit të pavlefshme OnResume() ( // Trajto kur aplikacioni yt rifillon) ) )

Klasa App fillon me konstruktorin, ku fillimisht thirret metoda InitializeComponent(), e cila inicializon objektin dhe më pas vendoset vetia MainPage. Nëpërmjet kësaj vetie, grupet e klasës së aplikacionit faqja kryesore aplikacionet. Në këtë rast, ai përcaktohet nga klasa HelloApp.MainPage, e cila është klasa e përcaktuar në skedarët MainPage.xaml dhe MainPage.xaml.cs.

Por kjo rrugë nuk është e vetmja. Xamarin.Forms ju lejon të krijoni një ndërfaqe vizuale ose duke përdorur kodin C# ose duke përdorur në mënyrë deklarative gjuhën xaml, të ngjashme me html, ose një kombinim të këtyre qasjeve.

Krijimi i një ndërfaqeje nga kodi C#

Le të shtojmë një klasë të rregullt C# në projektin HelloApp, të cilin do ta quajmë StartPage.

Dhe përcaktoni përmbajtjen e mëposhtme në këtë klasë:

Përdorimi i Xamarin.Forms; namespace HelloApp (klasa StartPage: ContentPage (Public StartPage() ( Kreu i etiketës = Label i ri() ( Tekst = "Përshëndetje nga Xamarin Forms"); this.Content = header; ) ) )

Kjo klasë përfaqëson një faqe, kështu që trashëgon nga klasa ContentPage. Konstruktori krijon një emërtim me tekst, i cili vendoset si përmbajtje e faqes (this.Content = header).

Për të caktuar MainPage si faqja e fillimit, ndryshoni klasën e aplikacionit:

Përdorimi i Xamarin.Forms; hapësira e emrave HelloApp ( Aplikacioni i klasës së pjesshme publike: Aplikacioni ( Aplikacioni publik() ( InitializeComponent(); MainPage = StartPage i ri(); ) i mbrojtur nga anulimi i pavlefshëm OnStart() ( // Trajto kur të fillojë aplikacioni yt) mbrohet anulimi i mbrojtjes void OnSleep() ( / / Trajto kur aplikacioni yt fle ) Mbrojtja e anulimit të pavlefshme OnResume() ( // Trajto kur aplikacioni yt rifillon) ) )

Vetia MainPage tani tregon për fillimin e sapokrijuar.

Vlen gjithashtu të theksohet se Visual Studio ka një shabllon të gatshëm për shtimin e klasave të reja të faqeve me kodin më të thjeshtë. Pra, për të shtuar një faqe të re, duhet të zgjidhni shabllonin e faqes së përmbajtjes (C#) kur shtoni një element të ri:

Kjo klasë i shtohet projektit kryesor të zgjidhjes (në këtë rast është HelloApp).

Klasa e faqes së shtuar do të ketë kodin e mëposhtëm:

Përdorimi i Sistemit; duke përdorur System.Collections.Generic; duke përdorur System.Linq; duke përdorur System.Reflection.Emit; duke përdorur System.Text; duke përdorur Xamarin.Forms; hapësira e emrave HelloApp (klasa publike Faqe1: ContentPage ( Faqe publike1() ( Përmbajtja = StackLayout i ri ( Fëmijët = ( Etiketa e re ( Tekst = "Përshëndetje Faqja" ) ) ) ) )

Kjo klasë do të trashëgojë gjithashtu nga klasa bazë ContentPage dhe do të ketë pothuajse të njëjtin organizim si klasa MainPage e krijuar më sipër.

Dhe gjithashtu në klasën e aplikacionit, ne mund ta vendosim këtë faqe si faqen fillestare:

Përdorimi i Xamarin.Forms; Hapësira e emrave HelloApp ( Klasa publike e pjesshme Aplikacioni: Aplikacioni ( Aplikacioni publik() ( InitializeComponent(); Faqja kryesore = Faqja e re1(); ) //........... ) )

5

Unë kam bërë shumë seksione të ndryshme të sistemit Nintendo DS GUI si butona, kuti teksti dhe kuti kontrolli, por më duhet një mënyrë për t'i fshehur këto klasa në një klasë Gui në mënyrë që të mund të vizatoj gjithçka në ekran menjëherë dhe të kontrolloj të gjithë butonat menjëherë në mënyrë që të kontrolloni nëse ndonjë buton është shtypur. Pyetja ime është se cila është mënyra më e mirë për të organizuar të gjitha klasat (si butonat dhe kutitë e tekstit) në një klasë të vetme GUI?

Ja një mënyrë që mendova, por nuk më duket e drejtë:

Redakto: Unë jam duke përdorur C++.

Klasa Gui ( publike: void update_all(); void draw_all() const; int add_button(Button *button); // Kthim id-në e butonit void remove_button(int button_id); private: Button *buttons; int num_buttons; )

Ky kod ka disa probleme, por thjesht doja t'ju jepja një ide se çfarë dua.

  • 5 përgjigje
  • Renditja:

    Aktiviteti

2

Kjo pyetje është shumë e ngjashme me atë që do të postoja, vetëm e imja është për programimin Sony PSP.

Unë kam kërkuar diçka për një kohë, kam konsultuar disa libra dhe VTM dhe deri më tani kjo është një ide e përafërt e sistemeve të thjeshta UI.

Klasa uiElement() ( ... Përditësimi i zbrazët virtuale() = 0; Vizatimi i zbrazët virtuale() = 0; ... ) klasa uiButton() publike: uiElement ( ... Përditësimi i zbrazët virtuale(); Vizatimi i zbrazët virtuale() . (); void Draw(); void AddElement(uiElement *Element); void RemoveElement(uiElement *Element); std::lista elementet; ... ) void uiWindow::Update() ( ... për (listë ::iterator it = Elementet.begin(); it != Elementet.fund(); it++) it->Përditëso(); ... ) void uiWindow::Draw() ( ... për (listë ::iterator it = Elementet.begin(); it != Elementet.fund(); it++) it->Draw(); ...)

parimi është krijimi i dritares dhe elementeve të sulmit ndërfaqja e përdoruesit në të, dhe thirrni metodat e tërheqjes dhe përditësimit nga funksionet kryesore përkatëse.

Asgjë nuk funksionon ende për mua, pasi kam probleme me kodin e vizatimit. Me API të ndryshme në PC dhe PSP, po shikoj kodin e mbështjellësit për OpenGL dhe psp gu.

Shpresoj se kjo ndihmon.

0

Një strategji e dobishme për t'u mbajtur parasysh mund të jetë modeli i përbërë. Në një nivel të ulët, mund t'ju lejojë të trajtoni më lehtë të gjitha objektet GUI (dhe koleksionet e objekteve) pasi ato të jenë krijuar. Por unë nuk e di se çfarë lidhet me dizajnin GUI, kështu që një vend për të gjetur frymëzim të përgjithshëm është në kodin burimor të një projekti ekzistues. WxWidgets është një GUI ndër-platformë me një të aksesueshme Kodi i burimit. Suksese me projektin tuaj!

0

3

Për ata që janë të interesuar, këtu është paketa ime GUI me burim të hapur, të licencuar nga BSD për DS:

Përgjigja e Subject2k është mjaft e mirë, por unë do të rekomandoja seriozisht të keni një kod që përmban elementë të ndërfaqes së fëmijëve në klasën bazë uiElement. Ky është modeli që kam ndjekur në Woopsie.

nëse ti jo mbështeteni këtë në klasën bazë, do të hasni në probleme serioze kur përpiqeni të zbatoni diçka më komplekse se një kuti teksti dhe një buton. Për shembull:

  • Shiritat e tabelave mund të modelohen si butona të shumtë të grupuar nën një element të vetëm UI prind që ofron ekskluzivitet reciprok të përzgjedhjes;
  • Grupet e radiove (me kalimin e kohës);
  • Shiritat e lëvizjes mund të përfaqësohen si një element rrëshqitës/ullues dhe një buton lart/poshtë;
  • Listat e lëvizjes mund të përfaqësohen si një kontejner dhe disa elementë të ndërfaqes së përdoruesit.

Gjithashtu, vlen të kujtohet se DS ka një procesor 66 MHz dhe 4 MB RAM, i cili përdoret si për të ruajtur programin tuaj ashtu edhe për ta ekzekutuar atë (disqet DS ngarkohen në RAM përpara se të ekzekutohen). Ju me të vërtetë duhet ta konsideroni atë si një sistem të integruar, që do të thotë se nuk ka STL. E hoqa STL-në nga Woopsi dhe arrita të kursej 0,5 MB. Jo shumë sipas standardeve të desktopit, por është 1/8 e memories totale të disponueshme DS të konsumuar nga mbeturinat STL.

Unë detajoj të gjithë procesin e shkrimit të një ndërfaqeje përdoruesi në blogun tim:

Ai përfshin një përshkrim të dy algoritmeve që kam gjetur për rivizatimin e ekranit, që është pjesa e ndërlikuar e krijimit të një GUI (njëri thjesht thyen drejtkëndëshat dhe kujton zonat e dukshme, dhe tjetri përdor pemët BSP, që është shumë më efikase dhe më e lehtë për t'u kuptoj), këshilla optimizimi, etj. d.



Po ngarkohet...
Top