Програма с графичен интерфейс. Създаване на графичен интерфейс с помощта на Qt. Създаване на интерфейс от C# код

1.1. Здравей Qt!

Задръжте курсора на мишката под текста на най-простата Qt програма:

1 #включи 2 #включване 3 int main(int argc, char *argv) 4 ( 5 QApplication app(argc, argv); 6 QLabel *label = new QLabel("Здравей, Qt!", 0); 7 app.setMainWidget(label); 8 етикет ->show(); 9 return app.exec(); 10 ) Тук в редове 1 и 2 са включени класовете QApplication и QLabel.

На ред 5 се създава екземпляр на класа QApplication, който се обработва от ресурсите на програмата. Конструкторът на QApplication получава аргументи argc и argv, обвивките на Qt могат да обработват аргументи от командния ред.

Ред 6 създава визуален компонент QLabel, който показва „Hello, Qt!“. В терминологията на Qt се извикват всички визуални компоненти, които ще имат графичен интерфейс джаджи(Джаджи). Бутони, менюта, скролиращи върти и различни рамки – всичко това са уиджети. Някои уиджети могат да се използват в техните собствени уиджети, например, smutty програми - най-очевидният уиджет, който може да се използва от QMenuBar, QToolBar, QStatusBar и други. null) индикатор, който ви казва, че тази джаджа няма "линийка" към нея. не влизайте с друга джаджа.

На ред 7 се присвоява джаджата "head" на програмата. Ако ползвателят затвори джаджата "head" на програмата (например натиснах бутона "X" в заглавието на прозореца), програмата завършва работата си. Ако програмата не разпознае джаджата на главата, тя ще продължи да чака фонов режим след затваряне на прозореца.

На ред 8 знакът е видим. Джаджите винаги се правят невидими, така че програмистът е лишен от възможността да коригира параметрите на дисплея, преди вонята да стане видима.

На ред 9 прехвърлянето на Qt библиотека е деактивирано. От този момент програмата ще премине в режим на изчистване, ако не правите нищо, а просто проверите циферблата, например, като натиснете клавиша или бутона на мишката.

Be-yaka diya koristuvacha spawn подиум(с други думи - "напредък"), в случай на програма, можете да щракнете върху една или повече функции. За този смисъл добавките с графичен интерфейс са радикално модифицирани в специални програми, с групова обработка на данни, като че ли са приели входа като потребител, те самостоятелно обработват йога, виждат резултатите и завършват работата си без допълнително участие от хора.

Бебе 1.1. Vikno програми за windows xp


Сега е време да пренапишем робота на нашата програма. На първо място - необходимо е да имате инсталиран Qt 3.2 (или новата версия) и да промените пътя на PATH към директорията bin. (За Windows, настройката на променения PATH се дезактивира автоматично по време на инсталирането на Qt библиотеката)

Копирайте текста на програмата от файла с име hello.cpp от директорията hello.

Отидете до друга директория и изпълнете командата:

Qmake -project за създаване на независим от платформа файл на проект (hello.pro) и след това дайте следната команда: qmake hello.pro Тази команда ще създаде Makefile въз основа на файла на проекта. Дайте командата make за компилиране на програмата и след това я стартирайте, като напишете Здравейте(на Windows) или ./Здравейте(за Unix) или отворете hello.app(Mac OS X). Ако работите под Windows и използвате Microsoft Visual C++, трябва да замените командата make и да издадете командата nmake. Като алтернатива можете да създадете проект на Visual Studio от файла hello.pro, като изпълните командата: qmake -tp vc hello.pro и след това компилирате програмата във Visual Studio.

Бебе 1.2. Етикет с форматиран текст.


А сега нека разбием троха. Променихме външния вид на етикета, като добавихме форматиране към текста в HTML стил. За кого, заменете реда

QLabel *label = нов QLabel("Здравей, Qt!", 0); на QLabel *label = нов QLabel("

Здравейте " "Qt!

", 0); и изберете отново програмата.


1.2. Действие на сигнали.

Офанзивният задник показва - как да организираме реакцията на програмата към díí koristuvach. Tsya програма за натискане на бутона, когато се натисне върху як, програмата се затваря. Външният текст вече е подобен на предния задник, поради факта, че сега, като основна джаджа, QLabel замества QPushButton и допълнителния код, който служи като факт на атаката.

Бебе 1.3. Излезте от програмата.


1 #включи 2 #включване 3 int main(int argc, char *argv) 4 ( 5 QApplication app(argc, argv); 6 QPushButton *button = new QPushButton("Quit", 0); 7 QObject::connect(button, SIGNAL(clicked() ), 8 &app, SLOT(quit())), 9 app.setMainWidget(button);10 button->show(); сигнали, разказвайки його за онези, които ползвателят е извършил, било то дело или за тези, които ще сменят лагера си. Например екземпляр на класа QPushButton изпраща сигнал clicked() към програмата, когато бутонът е натиснат. Сигналът може да бъде "свързан" към функционален манипулатор (такива Qt-манипулатори се наричат слотове). По този начин, ако джаджата надвие сигнала, слотът се извиква автоматично. Приложенията са свързали сигнала clicked(), подобно на бутон, към слота quit(), екземпляр на класа QApplication. Уикитата SIGNAL() и SLOT() са макросигнали, ще докладваме за тях в следващия раздел.

Сега нека вземем програмата. Предполагам, че вече сте създали директорията за излизане и сте разпространили файла quit.cpp. Дайте команда qmakeза създаване на проектен файл и след това изведнъж - за създаване на Makefile:

Qmake -project qmake quit.pro Сега излезте от програмата с командата направии започнете йога. Независимо дали натиснете бутона "Quit" или натиснете бутона "Proble" на клавиатурата, програмата приключва работата си.

В атакуващия задник е показано как е възможно да спечелите сигнали и слотове за синхронизиране на две джаджи. Tsya програма proponuê koristuvachevі zaprovaditi svіy vіk. Можете да го направите с помощта на бутоните за управление на личника или с помощта на мишелова.

Бебе 1.4. Възрастова програма.


Добавете три джаджи: QSpinBox, QSlider и QHBox (хоризонтална зона на оформление). Основната джаджа на програмата е QHBox. Компоненти на QSpinBox и QSlider поставени в средата на QHBox и є съвместим , В последно време.

Бебе 1.5. Джаджи за възраст.


1 #включи 2 #включване 3 #включи 4 #включи 5 int main(int argc, char *argv) 6 ( 7 QApplication app(argc, argv); 8 QHBox *hbox = new QHBox(0); 9 hbox->setCaption("Въведете вашата възраст"); 10 hbox-> setMargin(6); 11 hbox->setSpacing(6); 12 QSpinBox *spinBox=ново QSpinBox(hbox); 13 QSlider *slider=ново); 15 плъзгач->setRange(0, 130); 16 QObject::connect(spinBox, SIGNAL(valueChanged(int)), 17 плъзгач, SLOT(setValue(int))); (valueChanged(int)), 19 spinBox, SLOT(setValue(int))), 20 spinBox->setValue(35); 21 app.setMainWidget(hbox); 22 hbox->покажи(); 23 return app.exec( );24) Редове от 8 до 11 създават и затварят QHBox. За да въведете текст в заглавието на прозореца, извикайте setCaption(). След това ще възстановим празното пространство (6 пиксела) до това между подходящи джаджи.

В редове 12 и 13 се създават QSpinBox и QSlider, а QHBox се присвоява като Vlasnik.

Без изненада от онези, които не са задали изрично нито позицията, нито разширяването на джаджите QSpinBox и QSlider, вонята беше спретнато разпръсната в средата на QHBox. Vlasne за tsgogo и назначения QHBox. Vín vykonuê автоматично поставя подходящите джаджи, присвоявайки им координатите на разположението и местоположението, оставени в vіd їkhnіh може ли това vlaštuvan. Qt има много класове, подобни на QHBox, които ни помагат в рутинната работа с ръчно регулиране на позицията и преоразмеряване на визуални компоненти.

В редове 14 и 15 са монтирани допустими развръзки на личника и маншета. (Можем спокойно да признаем, че е малко вероятно нашата стенограма да премине повече от 130 години.) Две уикита за свързване() в редове от 16 до 19 синхронизират тага на името, така че защо stink трябва винаги да съвпада с една и съща стойност. Всеки път, когато стойността на един от модулите се промени, той изпраща сигнал valueChanged(int), за да съответства на слота setValue(int) на другия модул.

На ред 20 е инсталирана основната стойност (35) на lichnik. Когато бъде подадена, променливата заменя сигнала valueChanged(int) въз основа на стойността на входния аргумент, равна на 35. Това число се предава на слота setValue(int) на графичния модул QSlider, който задава стойността на джаджа, равна на 35. Ако сигналът valueChanged(int) вече е изпратен Някои от неговите стойности са се променили драстично, извиквайки слота setValue(int) към джаджа QSpinBox по този начин. За първи път личилникът не изпрати сигнал, фрагментите от значението му и така направиха 35. По този начин се запазва рекурсивната рекурсия. Малюнок 1.6 илюстрира ситуацията.

Бебе 1.6. Промяната на едно значение изисква промяна на друго.


В ред от 22 QHBoxes се опитайте да бъдете видими (едновременно с помощта на джаджи).

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

1.3. Робот от усъвършенствана система.

Системата на Довидков Qt - може би най-важният инструмент на всеки търговец на дребно. Vaughn описва всички функции на класа на тази библиотека. (Документацията на Qt 3.2 включва описания на повече от 400 класа и 6000 функции.) Тази книга има много класове и функции на Qt, но далеч не е изчерпателна. Следователно е необходимо да се запознаете самостоятелно с усъвършенстваната система Qt.

Стилове на джаджи
Екранни снимки, yakí mi bachili, buli otrimani в Windows XP. Текущият вид на уиджетите обаче се променя в зависимост от платформата, на която е стартирана програмата. От друга страна, Qt може да емулира стария облик на всички поддържащи платформи.



В тази статия има описание на създаването на най-простите допълнения от най-често срещаните форми на моя C ++. Бих искал да изясня: разработката на добавки за "форма" C ++ ще бъде въведена сред Microsoft Visual Studio (ще бъде видяна от основния конкурент, Borland Software). Warto означава, че Visual Studio има два начина за изграждане на добавки с формуляри, решението се взема по време на създаването на нов проект.

Първият от тях е Windows Forms, който реализира графичен интерфейс и е съвместим с Microsoft.NET Framework. Това ръководство ще ви позволи да получите достъп до интерфейсните елементи на Microsoft Windows и да създадете Win32 API обвивката в кода на ядрото. За да изразите мислите си в по-разумна форма, тогава датският pidkhid е още по-подобен на добавката след конзолата, но малко по-сгънат. використна форма.

Друг начин да се базирате на Microsoft Foundation Classes (MFC), библиотеки, е да поемете задачата да създадете програмна рамка. На първо място, MFC готов модел на vicorist MVC (Model-View-Cont roller). Дания е по-сгъваема от първата, но спираловидно преминавайки към новата, можете лесно да създадете рамка за допълнителни добавки, например текстов редактор, или да завъртите компонента Ribbon и да създадете меню, както виждате MS Office 2010 .

Създаване на програма в MS Visual Studio

Нека създадем нова програма: File->New->Project. На пръв поглед трябва да разберете и да изберете Windows Forms Application, да дадете име (app1) и име на новия проект и да потвърдите създаването си, като натиснете бутона „OK“.

На първо място, rozpochat без междинно програмиране, след което разберете какъв е начинът. Podiya tse diya, scho vídbuvaєtsya за пеещи умове. Най-простият (и най-широкият) можете да използвате Load, Click ... нека да разгледаме някои от тях:

  • Активиран - подиум, който определя часа на активиране на елемента.
  • Щракване - обвинява едно кликване върху елемента.
  • DoubleClick - щракнете върху елемент.
  • HelpRequested - помощ при натискане на клавиш .
  • Paint - Vinicate, ако елементът е пребоядисан.
  • MouseLeave - podіya spratsovuє, ако курсорът е вляво между елемента.

Не забравяйте, че захранващият елемент трябва да лежи в този тип. За да прегледате всички формуляри, налични за обекта, трябва да го видите и да изберете иконата на блистер в прозореца за пълномощия. По-долу има частичен подраздел за елемента Form1. Тъй като е възможно да се бачити за подпрограмата Load, функцията Form1_Load е избрана, така че кодът, който е поставен в тази функция, ще бъде щракнат, когато формулярът бъде заснет.

Отворете файла Form1.h, ще има следния код:

Частно: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e)( )

Това е самата функция Form1_Load, тъй като тя работи, когато формулярът е заснет. Нека променим нещата, като добавим компонент TextBox към формуляра.

За кого, отворете формата за ресурс и вижте йога. След това изберете панела Toolbox и плъзнете компонента TextBox върху формуляра. Променете функцията Form1_Load по следния начин:

Частно: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) ( textBox1->Text = "Hello, World!"; //textBox1 е името на текста, който сте добавили към полето)

Стартирайте проекта, резултатите може да покажат следното известие:

Всичко е засега, продължете в следващите уроци.

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

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

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

Помислете за създаването на много теми, проекта HelloApp (в противен случай създаваме нов). Зад ключалката целият интерфейс се създава в класа App, който се намира във файла App.xaml.cs и който представлява потоковата програма:

Код за заключване на Yogo:

Използване на системата; използване на 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.

Пътят на Alecey не е единствен. Xamarin.Forms ви позволява да създадете визуален интерфейс както с помощта на C # код, така и по декларативен начин с помощта на xaml mov, подобно на html, или можете да ги комбинирате.

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

Добавете към проекта HelloApp с C# клас, наречен StartPage.

I значимо в този клас такова място:

Използване на Xamarin.Forms; namespace HelloApp ( class StartPage: ContentPage ( public StartPage() ( Label header = new Label() ( Text = "Hi 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 сочи към интелигентно сгънатата страна на StartPage.

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

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

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

Използване на системата; vicorist System.Collections.Generic; използване на System.Linq; vicorist 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, за да мога незабавно нарисувайте всичко на екрана, всички подред, и веднъж обърнете всички бутони, така че perevíriti, chi натиснати бутони като подобни. My food е най-добрият начин да организирате всички класове (например бутони и текстови полета) в един 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; виртуална празнота Draw () = 0; ... ) клас uiButton () публичен: uiElement ( ... виртуална празнота Актуализация (); виртуална празнота Draw () ; ... ) клас 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 е междуплатформен графичен интерфейс с достъпен изходен код. Успех с проекта!

0

3

За тихо, hto zatsіkavleniya, axis my z vídkritim vіhіdnym код, BSD-лицензиран GUI инструментариум за DS:

Хубаво е да докладвате за subject2k, но сериозно бих препоръчал майчиния код, за да отмъсти на елементите на интерфейса на детето в базовия клас uiElement. Tse srazok, за който заших във Vupsi.

Yakscho wi неНадстройте кода в базовия клас, поради сериозни проблеми при опит за внедряване на сгъване, долно текстово поле и бутон. Например:

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

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

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

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

Windows 7