Програмиране в c графичен интерфейс. Създаване на GUI с Qt

Добър ден! В този урок ще създадем вашето първо GUI приложение в MS. визуално студио. Това ще бъде един вид "Hello World" за графични приложения. Веднага ще кажа, че Използване на Windows Forms не е единственият начин за C# програмистите да създават графични приложения (приложения с графичен потребителски интерфейс), но е добро място да започнете да учите. И така, стартираме Visual Studio.

Стартиран? Тогава към бизнеса! Отиваме в главното меню и избираме елемента "Файл - Нов - Проект", както е показано на фигурата по-долу.

В прозореца, който се появява:

  • от лявата страна изберете "Шаблони - Visual C # - Windows";
  • в основната област изберете елемента „Приложение за Windows Forms“;
  • в долната част на прозореца въведете името на проекта и посочете местоположението му на диска.

Като цяло, както е показано на фигурата по-долу.

Уточни ли какво ти трябва? След това кликнете върху бутона "OK". Сега трябва да видите нещо подобно (основните области са подчертани с правоъгълници):

В изображението по-горе обозначих основните области: зоната на дизайнера (горе вляво), областта за изследване на решенията (горе вдясно) и областта на свойствата (долу вдясно). Това са областите, с които ще работим най-често.

В областта на дизайнера вече има празна „форма“, това е така нареченият прозорец, в този случай главният прозорец на нашата програма. Областта за свойства показва свойствата на елемента, избран в дизайнера, в този случай нашата форма, но областта за изследване на решенията съдържа файлове на проекта, включително тези, свързани с формулярите (прозорците) на програмата. А сега нека променим малко нашата форма и да стартираме това първо приложение.

За да направите това, изберете формуляра в дизайнера (за това можете просто да щракнете с левия бутон върху формуляра) и отидете до блока със свойства, в който намираме реда „Текст“ (думата е текст, търсим в лявата колона), както е показано на фигурата по-долу.

Свойство "Текст" на основната форма на приложението

Моля, обърнете внимание, че лявата колона показва името (името на свойството), а дясната колона показва неговата стойност.

В този случай имаме работа с текстово свойство и неговата стойност се показва в заглавието на прозореца, така че нека сега поставим нещо свое там, например нещо като: "Главен прозорец", както е показано на фигурата по-долу:

Сега можете да създадете проекта и да го стартирате. За да направите това, отидете в главното меню и изберете "Build - Build Solution". И след това стартираме приложението, за това избираме елемента „Отстраняване на грешки - Изпълнение без отстраняване на грешки“ в главното меню. В резултат на това трябва да видите следния прозорец.

В следващия урок ще разгледаме проста работас дизайнера на формуляри и настройка на GUI елементи и този урок приключи, създадохме първото графично приложение, изградихме го и го стартирахме.

Здравейте всички. В предишните ми уроци говорих за създаване на конзолни приложения в средата на Borland C++ Builder. Започвайки от този урок, ще научим C++, като използваме графични приложения като пример. Който иска да се научи да създава конзоли. Може да прочете книгата "The Art of Building Console Applications in C++". Първото ни приложение ще бъде програма, която показва произволно число. Отваряме borlandyayu, просто не създавайте конзолно приложение. След стартиране на екрана ще се появи следната форма:

Най-отгоре ще има лента с инструменти:

Вдясно инспекторът на обекти и списъкът с формуляри:

Компонентите (за разлика от BASIC) вече са разделени на раздели. По име не е трудно да се познае какъв тип компоненти са поставени в раздела. Отворете стандартния раздел и поставете компонентите във формуляра като моя:

Бутонът ще бъде означен като Button1. Тя трябва да бъде сменена. В долния ляв прозорец на Borland се показват свойствата на компонентите; те трябва да бъдат променени на нашите:

На бутона Caption (Inscription) сменете на Generate

За етикет Label1 променете свойството Caption на Number

В Edit1 свойството Text (текстът в самата редакция) просто се изтрива.

След тези манипулации формулярът ще изглежда като моя:

Приключихме с визуалния стил, между другото, повечето имоти в Borlyad изглеждат като BASIC или Delphi. Експериментирайте с тях.

Сега да поговорим за събитията. Всеки компонент има събития, те съдържат код, който ще бъде изпълнен при достигане на определени условия. Например за бутон кодът в събитието Click ще се изпълни, когато щракнем върху него и т.н.

Днес ще използваме само събитието Click. Кликнете два пъти върху бутона и влезте в прозореца с код:

Събитието Click за бутона се генерира автоматично. Кодът, подобно на конзолно приложение, се поставя между фигурни скоби. Пишем кода:

Void __fastcall TForm1::Button1Click(TObject *Sender) ( double aaa; //Поставете числото, генерирано от процесора тук String count; //Напишете същото число, но намалено до рандомизиране на низ; //Това е необходимо, за да може числата не се повтарят aaa=random (34)*43646; //Генериране на произволно число count=FloatToStr (aaa); //Превеждане на числото в низ с помощта на функцията FloatToString Edit1->Text=count; //Извеждане на низова променлива в текстовия прозорец)

Алгоритъмът е прост, декларираме променлива за съхраняване на дробно число в нея и променлива за числото в низова форма. Факт е, че веднага генерираното число не може да се покаже в текстово поле (ще има грешка. Очакваше се текст и беше получено число), така че с помощта на функцията FloatToStr превеждаме числото в низ и го показваме в текстово поле. За изход се обръщаме (използвайки знака -> (подобно на точка във vb)) към свойството за текст Edit1 и показваме текста там. Това е всичко за сега.

Между другото, въпрос за запълване: кой се размножава по-бързо компютърни вируси, китайски или зайци?


коментари()

Витай

артьомка

"randomize; //Това е необходимо, за да не се повтарят числата." продължавам да повтарям. какво да правя?

Андрю

Има 2 опции 1-използвайте "randomize();" или в ред 6 усложнете функцията, напр. добавете още секунди

Андрю

"секунди" или резултат от събиране на две псевдослучайни числа, разделени на секунди - колкото повече фактори, толкова по-непредсказуемо е числото

артьомка Алексей (alex13sh)

произволно
това е така, че числата да не се повтарят, когато програмата е включена
добре, това е. включите програмата, натиснете бутона няколко пъти
1)5
2)47
3)86
това съм аз в цели числа
добре, ако изключите програмата и я включите отново, при последователно натискане на бутона ще има едни и същи числа със същите последователности
това е без рандомизиране, но това няма да бъде премахнато

И какво се повтаря по този начин
1)3
2)69
3)1
4)3
5)8
6)1
ТОВА НЕ СЕ ОТНАСЯ ЗА рандомизирането
за да избегнете това Андрей вече отговори))

Бегзод

Имам visual c++.net на моя компютър. Не мога да намеря учебници, изходни кодове за него. Помощ pzhs.

Али05

Видях в книжарницата учебник по Visual C ++.Net "Никита Култин Основи на програмирането в Microsoft Visual C++ 2010", той просто показва как да създавате графични приложенияпод Windows (WinForms).

Coolhacker Nintendo

Чудя се какво му е "лошото"?

Coolhacker

При липсата на способност за правилно представяне на материала и привикването ви, господа, към лош стил на програмиране, а ла транслитерирани имена на променливи/функции.

Едуард Coolhacker

Министерство на образованието и науката на Руската федерация

Федерална държавна бюджетна образователна институция

висше професионално образование

„УФА ЩАТ НЕФТ

ТЕХНИЧЕСКИ УНИВЕРСИТЕТ"

Катедра по компютърни науки и инженерна кибернетика

Създаване на GUI приложение в Microsoft Visual Studio 2010

Учебно помагало

за лабораторни и практически занятия

със студенти от направлението

230100 (09.03.01) "Информатика и компютърна техника"

Учебното помагало предоставя теоретични сведения, задачи за практически и лабораторни упражнения по дисциплината "Програмиране".

Ръководството е предназначено за преподаватели по дисциплината, както и за студенти от направление: 230100 "Информатика и компютърна техника".

Съставител: Gabdullina A.A., чл. преподавател в катедрата ВТИК

Druzhinskaya E.V., чл. преподавател в катедрата ВТИК

Рецензент: Филипов V.N., д-р, доцент на катедрата. ВТИК.

1. Теоретична информация 4

1.1. Основни понятия 4

1.2. Запознаване с Windows приложениеФормуляр в Microsoft Visual Studio 2010 4

1.3. Контролна форма 7

1.5. Функция MessageBox 9

1.6. Контрола TextBox 10

2.Практическа задача. Въведение в приложението Windows Form в Microsoft Visual Studio 2010 12

2.1. Структура на оценката за свършена работа 12

2.2. Процедура за изпълнение на практическа работа 12

3. Лабораторна работа. Разработка на приложения в Microsoft Visual Studio 2010 16

3.1. Лабораторна поръчка 16

3.2. Задача 1. Табулиране на функция и изчисляване на нейните стойности в посочения интервал с дадена стъпка 16

3.3. Индивидуални задачи 19

3.4. Задача 2. Обработка двумерни масиви 21

3.5. Индивидуални задачи 27

  1. Теоретична информация

  1. 1.1. Основни понятия

Автоматизацията на информационните процеси в момента е представена преди всичко от разработването на софтуерно приложение с графичен потребителски интерфейс (GUI), който управлява потоците от данни.

Графичният потребителски интерфейс (GUI) е система от средства за взаимодействие на потребителя с устройство, базирана на представянето на всички системни обекти и функции, достъпни за потребителя, под формата на графични компоненти на екрана (прозорци, бутони, ленти за превъртане и др.) .

Най-често елементите на интерфейса в GUI се изпълняват на базата на метафори и показват предназначението и свойствата си, което улеснява разбирането и усвояването на програмите от неподготвените потребители. По този начин работата на потребителя се извършва с екранни форми, съдържащи контролни обекти и ленти с инструменти с бутони за действие за обработка.

Стандартният графичен потребителски интерфейс трябва да отговаря на редица изисквания:

Поддържа информационната технология на работата на потребителя със софтуерния продукт;

Фокусирайте се върху крайния потребител, който комуникира с програмата на външно ниво на взаимодействие;

Удовлетворява принципа на „шест“, когато в една лента с менюта са включени не повече от 6 концепции, всяка от които съдържа не повече от 6 опции;

    поддържат стандартизирано предназначение на графичните обекти и, ако е възможно, тяхното местоположение на екрана.

В обектно-ориентираното програмиране работим с класове и обекти. Обектите са съставни типове данни: те комбинират множество стойности в една единица и ни позволяват да записваме и съхраняваме тези стойности по име. С други думи, един обект е неподредена колекция от свойства, всяко от които има име и стойност. Наименуваните стойности, съдържащи се в даден обект, могат да бъдат или примитивни типове, като числа или низове, или други обекти.

При разработването на неконзолни приложения основната концепция е формата.

Формулярът е контейнер за хостване на контроли на средата за проектиране.

Свойства - възможност за достъп до информация, съхранявана в този елемент.

Методите са набор от действия, които даден обект може да извърши.

Събитието е действие, разпознато от обект (например щракване с мишката, натискане на клавиш), за което може да се програмира отговор, т.е. реакцията на обекта към събитието.

Последна актуализация: 26.05.2019 г

В Xamarin.Forms визуалният интерфейс се състои от страници. Страницата е обект от клас Page , тя заема цялото пространство на екрана. Това е, което виждаме на екрана мобилно устройствое страница. Едно приложение може да има една или повече страници.

Страницата приема един от контейнерите за оформление като съдържание, което от своя страна съдържа стандартни визуални елементи като бутони и текстови полета, както и други елементи за оформление.

Да вземем проекта HelloApp, създаден в предишната тема (или да създадем нов). По подразбиране целият интерфейс се създава в класа App, който се намира във файла App.xaml.cs и представлява текущото приложение:

Неговият код по подразбиране е:

Използване на системата; използване на Xamarin.Forms; използване на Xamarin.Forms.Xaml; namespace HelloApp ( public partial class App: Application ( public App() ( InitializeComponent(); MainPage = new MainPage(); ) protected override void OnStart() ( // Handle when your app starts ) protected override void OnSleep() ( / / Манипулиране, когато приложението ви спи ) protected override void OnResume() ( // Манипулиране, когато приложението ви се възобновява ) ) )

Класът App започва с конструктора, където първо се извиква методът InitializeComponent(), който инициализира обекта и след това се задава свойството MainPage. Чрез това свойство се задава класът App начална страницаприложения. В този случай той се дефинира от класа HelloApp.MainPage, който е класът, дефиниран във файловете MainPage.xaml и MainPage.xaml.cs.

Но този път не е единственият. Xamarin.Forms ви позволява да създадете визуален интерфейс или с помощта на C# код, или декларативно с помощта на езика xaml, подобен на html, или комбинация от тези подходи.

Създаване на интерфейс от C# код

Нека добавим обикновен C# клас към проекта HelloApp, който ще наречем StartPage.

И дефинирайте следното съдържание в този клас:

Използване на Xamarin.Forms; namespace HelloApp ( class StartPage: ContentPage ( public StartPage() ( Label header = new Label() ( Text = "Hello from Xamarin Forms" ); this.Content = header; ) ) )

Този клас представлява страница, така че наследява от класа ContentPage. Конструкторът създава етикет с текст, който се задава като съдържание на страницата (this.Content = header).

За да обозначите MainPage като начална страница, променете класа на приложението:

Използване на Xamarin.Forms; namespace HelloApp ( public partial class App: Application ( public App() ( InitializeComponent(); MainPage = new StartPage(); ) protected override void OnStart() ( // Handle when your app starts ) protected override void OnSleep() ( / / Манипулиране, когато приложението ви спи ) protected override void OnResume() ( // Манипулиране, когато приложението ви се възобновява ) ) )

Свойството MainPage вече сочи към новосъздадената начална страница.

Също така си струва да се отбележи, че Visual Studio има готов шаблон за добавяне на нови класове страници с най-прост код. Така че, за да добавите нова страница, трябва да изберете шаблона Страница със съдържание (C#), когато добавяте нов елемент:

Този клас се добавя към основния проект на решението (в случая това е HelloApp).

Добавеният клас страница ще има следния код:

Използване на системата; използване на System.Collections.Generic; използване на System.Linq; използване на System.Reflection.Emit; използване на System.Text; използване на Xamarin.Forms; пространство от имена HelloApp ( публичен клас Page1: ContentPage ( публичен Page1() ( Съдържание = нов StackLayout ( Деца = ( нов етикет ( Текст = "Здравей страница") ) ); ) ) )

Този клас също ще наследи от основния клас ContentPage и ще има почти същата организация като класа MainPage, създаден по-горе.

И също така в класа на приложението можем да зададем тази страница като начална страница:

Използване на Xamarin.Forms; пространство от имена HelloApp ( публичен частичен клас App: Приложение ( public App() ( InitializeComponent(); MainPage = new Page1(); ) //........... ) )

5

Направих много различни раздели на системата GUI на Nintendo DS като бутони, текстови полета и квадратчета за отметка, но имам нужда от начин да скрия тези класове в един клас Gui, така че да мога да рисувам всичко на екрана наведнъж и да проверя всички бутони наведнъж така че проверете дали са натиснати бутони. Въпросът ми е кой е най-добрият начин за организиране на всички класове (като бутони и текстови полета) в един GUI клас?

Ето един начин, който си помислих, но не изглежда правилен:

Редактиране:Използвам C++.

Class Gui ( public: void update_all(); void draw_all() const; int add_button(Button *button); // Връща идентификатор на бутон void remove_button(int button_id); private: Button *buttons; int num_buttons; )

Този код има няколко проблема, но аз просто исках да ви дам представа какво искам.

  • 5 отговора
  • Сортиране:

    Дейност

2

Този въпрос е много подобен на този, който щях да публикувам, само че моят е за програмиране на Sony PSP.

Търся нещо от известно време, консултирах се с някои книги и VTM и досега това е груба идея за прости потребителски системи.

Клас uiElement() ( ... виртуална празна актуализация () = 0; виртуална празна черта () = 0; ... ) клас uiButton () публичен: uiElement ( ... виртуална празна актуализация (); виртуална празна черта () ; ... ) клас uiTextbox() public: uiElement ( ... virtual void Update(); virtual void Draw(); ... ) ... // Други потребителски елементи class uiWindow() ( ... void Update (); void Draw(); void AddElement(uiElement *Element); void RemoveElement(uiElement *Element); std::list елементи; ... ) void uiWindow::Update() ( ... за (списък ::iterator it = Elements.begin(); то != Elements.end(); it++) it->Update(); ... ) void uiWindow::Draw() ( ... за (списък ::iterator it = Elements.begin(); то != Elements.end(); it++) it->Draw(); ... )

Принципът е създаването на прозореца и елементите на атака потребителски интерфейскъм него и извикайте методите за рисуване и актуализиране от съответните основни функции.

Все още нищо не ми работи, тъй като имам проблеми с кода за чертане. С различни API на PC и PSP гледам обвиващ код за OpenGL и psp gu.

Надявам се това да помогне.

0

Една полезна стратегия, която трябва да имате предвид, може да бъде съставният модел. На ниско ниво може да ви позволи по-лесно да боравите с всички GUI обекти (и колекции от обекти), след като бъдат създадени. Но не знам какво е свързано с GUI дизайна, така че едно място за намиране на общо вдъхновение е в изходния код на съществуващ проект. WxWidgets е междуплатформен GUI с достъпен програмен код. Успех с проекта!

0

3

За тези, които се интересуват, ето моя GUI инструментариум с отворен код, лицензиран от BSD за DS:

Отговорът на Subject2k е доста добър, но бих препоръчал сериозно да имате код, който съдържа дъщерни интерфейсни елементи в базовия клас uiElement. Това е извадката, която последвах в Woopsie.

Ако ти неподдържате това в базовия клас, ще се натъкнете на сериозни проблеми, когато се опитвате да имплементирате нещо по-сложно от текстово поле и бутон. Например:

  • Лентите на таблиците могат да бъдат моделирани като множество бутони, групирани под един родителски UI елемент, който осигурява взаимна изключителност на избора;
  • Групи радиостанции (с течение на времето);
  • Лентите за превъртане могат да бъдат представени като елемент на плъзгач/улук и бутон нагоре/надолу;
  • Списъците за превъртане могат да бъдат представени като контейнер и няколко елемента на потребителския интерфейс.

Освен това си струва да запомните, че DS има 66 MHz процесор и 4 MB RAM, която се използва както за съхраняване на вашата програма, така и за нейното изпълнение (DS дисковете се зареждат в RAM, преди да стартират). Наистина трябва да го разглеждате като вградена система, което означава, че няма STL. Премахнах STL от Woopsi и успях да запазя 0,5MB. Не е много по стандартите за десктоп, но е 1/8 от общата налична DS памет, консумирана от STL боклука.

Описвам подробно целия процес на писане на потребителски интерфейс в моя блог:

Включва описание на два алгоритъма, които измислих за преначертаване на екрана, което е трудната част от създаването на GUI (единият просто разбива правоъгълниците и запомня видимите области, а другият използва BSP дървета, което е много по-ефективно и лесно за разбирам), съвети за оптимизиране и др. d.



Зареждане...
Горна част