Создание графического интерфейса средствами Qt. Методология разработки приложений с использованием форм Создание графического интерфейса на си

Всем здрасте. В своих прошлых уроках я рассказывал о создании консольных приложений в среде Borland C++ Builder. Начиная с этого урока мы будем изучать C++ на примере графических приложений. Кто хочет научится создавать консолки. Может прочитать книгу "Исскуство создания консольных приложений на C++". Первое наше приложение будет программа которая выводит случайное число. Открываем борландяю, только не создаем консольное приложение. После запуска на экране высвятится форма:

Сверху будет панель иснструментов:

Справа Инспектор Объектов и Список Форм:

Компоненты (в отличии от бейсика) уже разделены на вкладки. По названию не трудно догадаться компоненты какого типа размещены на вкладке. Откройте вкладку standart и разместите компоненты на форме как у меня:

На кнопке будет надпись Button1. Ее надо изменить. В нижнем левом окне борляндии приведены свойства компомнентов их надо изменить на наши:

У кнопки Caption (Надпись) меняем на Сгенерировать

У метки Label1 свойство Caption меняем на Число

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

После этих манипуляций форма будет похожа на мою:

С визуальным стилем закончели, кстати большинство свойств в борлядии похоже на бейсик или дельфи. Поэкспериментируйте с ними.

Теперь поговорим о событиях. У каждого компонента есть события, в них размещается код который будет выполнен при достижении определенных условий. Например у кнопки код в событии Click будет выполнен когда мы на нее нажмем и т.д.

Сегодня быдем пользоваться только событием Click. Жмем два раза на кнопку и поподаем в окно кода:

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

Void __fastcall TForm1::Button1Click(TObject *Sender) { double aaa; //Сюда поместим число сегенерированное процессором String count; //Запишем это же число, но приведенное к строчному виду randomize; //Это нужно чтобы числа не повторялись aaa=random(34)*43646; //Генерируем любое число count=FloatToStr (aaa); //Переводим число в строку c помощью функции FloatToString Edit1->Text=count; //Выводим в текстовое окно строковую переменную }

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

Кстати вопрос на засыпку: кто размножается быстрее компьютерные вирусы, китайцы, или кролики?


Комментарии ()

Vitay

артёмка

"randomize; //Это нужно чтобы числа не повторялись." У меня все равно повторяются. че делать?

Андрей

Есть 2 варианта 1-использовать "randomize();" или в строке 6 усложнить функцию напр. прибавлять еще и число секун

Андрей

"секунд" или результат сложения двух псевдослучайных чисел деленное на секунды - чем больше факторов тем более непредсказуемое получается число

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

randomize
это что бы числа не повторялись при включение програмы
ну то есть. включил прогу жмёшь кнопку несколько раз
1)5
2)47
3)86
это я целыми числами
ну и если выключишь прогу и заного включишь при серийного нажатие кнопки будет теже самые числа с тойжей последованостей
это без randomize а сним такого небудет

А то что повторяются таким образом
1)3
2)69
3)1
4)3
5)8
6)1
ЭТО НЕ ОТНОСИТСЯ К randomize
чтобы такого избежать Андрей уже ответил))

Begzod

у меня на компе visual c++.net . Не могу найти учебники,исходники по нему. Помогите пжс.

Ali05

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

Кулхацкер Нинтендо

интересно, в чем же заключается его "плохость" ?

Кулхацкер

В отсутствии умения нормально излагать материал и приучении вас, господ, к плохому стилю программирования, а-ля имена переменных/функций транслитом.

Edward Кулхацкер

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

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«УФИМСКИЙ ГОСУДАРСТВЕННЫЙ НЕФТЯНОЙ

ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Кафедра вычислительной техники и инженерной кибернетики

Создание приложения c графическим интерфейсом пользователя в среде microsoft visual studio 2010

Учебно-методическое пособие

для проведения лабораторных и практических занятий

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

230100 (09.03.01) «Информатика и вычислительная техника»

В учебно-методическом пособии приведены теоретические сведения, задания для практических и лабораторных работ курса «Программирование».

Пособие адресовано преподавателям дисциплины, а так же студентам направления: 230100 «Информатика и вычислительная техника».

Составители: Габдуллина А.А., ст. преподаватель каф. ВТИК

Дружинская Е.В., ст. преподаватель каф. ВТИК

Рецензент: Филиппов В.Н., к.т.н., доцент каф. ВТИК.

1.Теоретические сведения 4

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

1.2. Знакомство с приложением Windows Form в Microsoft Visual Studio 2010 4

1.3. Элемент управления Form 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), управляющего потоками данных.

Графический интерфейс пользователя (Graphical User Interface, GUI) это система средств для взаимодействия пользователя с устройством, основанная на представлении всех доступных пользователю системных объектов и функций в виде графических компонентов экрана (окон, кнопок, полос прокрутки и т. п.).

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

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

Поддерживать информационную технологию работы пользователя с программным продуктом;

Ориентироваться на конечного пользователя, который общается с программой на внешнем уровне взаимодействия;

Удовлетворять принципу «шести», когда в одну линейку меню включают не более 6 понятий, каждое из которых содержит не более 6 опций;

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

В объектно-ориентированном программировании мы имеем дело с классами и объектами. Объекты – это составные типы данных: они объединяют несколько значений в единый модуль и позволяют нам записывать и сохранять эти значения по имени. Другими словами, объект – это неупорядоченная коллекция свойств, каждое из которых имеет имя и значение. Именованные значения, содержащиеся в объекте, могут быть как элементарными типами, например числами или строками, так и другими объектами.

При разработке не консольных приложений, основным понятием является Форма.

Форма – это контейнер для размещения элементов управления среды разработки.

Свойства – возможность получения доступа к информации, которая хранится в этом элементе.

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

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

5

Я сделал много разных разделов GUI-системы для Nintendo DS, таких как кнопки и текстовые поля и флажки, но мне нужен способ скрыть эти классы в одном классе Gui, чтобы я мог рисовать все на экране все сразу, и сразу проверьте все кнопки, чтобы проверить, нажаты ли какие-либо кнопки. Мой вопрос - как наилучшим образом организовать все классы (например, кнопки и текстовые поля) в один GUI-класс?

Вот один способ, которым я думал, но это не кажется правильным:

Edit: Я использую C++.

Class Gui { public: void update_all(); void draw_all() const; int add_button(Button *button); // Returns button id void remove_button(int button_id); private: Button *buttons; int num_buttons; }

Этот код имеет несколько проблем, но я просто хотел дать вам представление о том, чего я хочу.

  • 5 ответов
  • Сортировка:

    Активность

2

Этот вопрос очень похож на тот, который я собирался публиковать, только мой предназначен для программирования Sony PSP.

Я какое-то время что-то искал, я консультировался с некоторыми книгами и VTMs , и до сих пор это приблизительная идея простых систем ui.

Class uiElement() { ... virtual void Update() = 0; virtual void Draw() = 0; ... } class uiButton() public: uiElement { ... virtual void Update(); virtual void Draw(); ... } class uiTextbox() public: uiElement { ... virtual void Update(); virtual void Draw(); ... } ... // Other ui Elements class uiWindow() { ... void Update(); void Draw(); void AddElement(uiElement *Element); void RemoveElement(uiElement *Element); std::list Elements; ... } void uiWindow::Update() { ... for (list ::iterator it = Elements.begin(); it != Elements.end(); it++) it->Update(); ... } void uiWindow::Draw() { ... for (list ::iterator it = Elements.begin(); it != Elements.end(); it++) it->Draw(); ... }

princple является создание окна и attact элементов пользовательского интерфейса к нему, и вызвать отрисовки и обновление методы из соответствующих основных функций.

У меня пока ничего не работает, так как у меня проблемы с кодом рисования. С различными API-интерфейсами на ПК и PSP я просматриваю код оболочки для OpenGL и psp gu.

Надеюсь, это поможет.

0

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

0

3

Для тех, кто заинтересован, вот мой с открытым исходным кодом, BSD-лицензированные GUI инструментарий для DS:

Ответ на предмет2k довольно хорош, но я бы серьезно рекомендовал иметь код, содержащий элементы дочернего интерфейса в базовом классе uiElement. Это образец, за которым я следил в Вупси.

Если вы не поддержите это в базовом классе, вы столкнетесь с серьезными проблемами при попытке реализовать что-либо более сложное, чем текстовое поле и кнопку. Например:

  • Табличные панели можно смоделировать как несколько кнопок, сгруппированных в единый родительский элемент пользовательского интерфейса, который обеспечивает взаимную исключительность выбора;
  • Группы радиостанций (с течением времени);
  • Полосы прокрутки могут быть представлены как элемент слайдера/желоба и кнопки вверх/вниз;
  • Списки прокрутки могут быть представлены в виде контейнера и нескольких элементов пользовательского интерфейса.

Кроме того, стоит помнить, что у DS есть процессор с частотой 66 МГц и 4 МБ ОЗУ, который используется как для хранения вашей программы, так и для ее выполнения (DS-диски загружаются в ОЗУ до их запуска). Вы действительно должны рассматривать его как встроенную систему, что означает, что STL отсутствует. Я удалил STL из Woopsi и сумел сохранить 0.5MB. Не так много по настольным стандартам, но это 1/8 от общей доступной памяти DS, потребляемой STL-мусором.

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

Она включает в себя описание двух алгоритмов я придумал для перерисовки экрана, который хитрая часть создание графического интерфейса (одно просто разбивает прямоугольники вверх и запоминает видимые области, а другое использует деревья BSP, что намного эффективнее и проще для понимания), советы по оптимизации и т. д.

В этой статье речь пойдет о создании простейших приложений с использованием форм на языке C++. Сразу хочу внести ясность: разработка «формовых» С++ приложений будет осуществляться в среде Microsoft Visual Studio (обойдем стороной главного конкурента от компании Borland Software). Стоит отметить, что в Visual Studio есть два способа сделать приложение с формами, решение принимается в момент создания нового проекта.

Первый из них - использовать Windows Forms, реализующий графический интерфейс пользователя и входящий в Microsoft.NET Framework. Данный подход упрощает доступ к интерфейсным элементам Microsoft Windows благодаря созданию обёртки для Win32 API в управляемом коде. Если изложить свои мысли в более понятной форме, то данный подход очень схож с построением консольного приложения, но чуть более сложен т.к. использует формы.

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

Создание приложения в MS Visual Studio

Давайте создадим новое приложение: File->New->Project. В появившемся окне как на рисунке выше найдите и выберите Windows Forms Application, далее укажите название (app1) и расположение нового проекта и подтвердите его создание нажатием кнопки «OK».

Прежде чем приступить непосредственно к программированию, следует понять, что такое событие. Событие это действие, которое происходит при определённых условиях. Самыми простыми (и наиболее распространенным и) можно считать Load,Click… рассмотрим некоторые из них более подробно:

  • Activated - событие, возникающее при активизации элемента.
  • Click - возникает при одиночном нажатии на элемент.
  • DoubleClick - двойной щелчок по элементу.
  • HelpRequested - срабатывает при нажатии клавиши .
  • Paint - возникает, когда элемент перерисовывается.
  • MouseLeave - событие срабатывает, когда курсор покидает границы элемента.

Не стоит забывать, что свойственные элементу события зависят от его типа. Чтобы просмотреть все доступные для объекта формы события следует выделить его и в окне свойств выбрать значок молнии. Ниже показана часть событий для элементаForm1. Как можете видеть для события Load выбрана функция Form1_Load, следовательно код, содержащийся в этой функции будет вызван при загрузке формы.

Откройте файл Form1.h, там будет такой код:

Private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e){ }

Это та самая функция Form1_Load, срабатывающая при загрузке формы. Давайте убедимся в этом, добавив на форму компонент TextBox.

Для этого откройте ресурс формы и выделите его. Далее выберите панель с инструментами Toolbox и перетащите компонент TextBox на форму. Модифицируйте функцию Form1_Load следующим образом:

Private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { textBox1->Text = "Hello, World!"; //textBox1 – имя добавленного вами текст бокса }

Запустите проект, в итоге должно появиться следующее сообщение:

На этом пока все, продолжение в следующих уроках.

Доброго времени суток! В этом уроке мы создадим Ваше первое приложение с графическим интерфейсом в MS Visual Studio. Это будет своего рода «Hello World» для графических приложений. Скажу сразу, что использование Windows Forms — не единственный способ создания графических приложений (приложения с графическим интерфейсом пользователя) для C# программистов, но начать изучение лучше именно с этого. И так, запускаем Visual Studio.

Запустили? Тогда к делу! Идем в главное меню и выбираем пункт «Файл — Создать — Проект», как показано на рисунке ниже.

В появившемся окне:

  • в левой части выбираем «Шаблоны — Visual C# — Windows»;
  • в основной области выбираем элемент «Приложение Windows Forms»;
  • в нижней части окна вводим имя проекта и указываем его расположение на диске.

В общем, как показано на рисунке ниже.

Указали что нужно? Тогда нажимайте на кнопку «OK». Теперь вы должны увидеть примерно следующее (основные области выделены прямоугольниками):

На рисунке выше, я обозначил основные области: область дизайнера (слева вверху), область обозревателя решений (справа вверху) и область свойств (справа внизу). С этими областями, мы будем работать чаще всего.

В области дизайнера, сейчас располагается пустая «форма», это так называемое окно, в данном случае, главное окно нашей программы. В области свойств, отображаются свойства выделенного в дизайнере элемента, в данном случае, нашей формы, ну а область обозревателя решений, содержит файлы проекта, в том числи, относящиеся и к формам (окнам) программы. А теперь, давайте немного изменим нашу форму, и запустим это первое приложение.

Для этого, выделим в дизайнере форму (для этого, можно просто кликнуть левой кнопкой мыши по форме) и перейдем в блок свойств, в котором найдем строку «Text» (слово текст, ищем в левом столбце), как показано на рисунке ниже.

Свойство «Text» основной формы приложения

Обратите внимание, в левом столбце указано имя (название свойства), а в правом — его значение.

В данном случае, мы имеем дело с текстовым свойством, и его значение, отображается в заголовке окна, так что, давайте теперь укажем там что-то свое, например, что-то вроде: «Главное окно», как показано на рисунке ниже:

Теперь, можно собрать проект и запустить. Для этого идем в главное меню и выбираем пункт «Сборка — Собрать решение». А потом запускаем приложение, для этого выбираем пункт «Отладка — Запуск без отладки» в главном меню. В результате Вы должны увидеть окно следующее окно.

В следующем уроке, мы рассмотрим простую работу с дизайнером форм, и настройку элементов графического интерфейса, а на этот урок подошел к концу, мы создали первое графическое приложение, собрали и запустили его.