- •2 Часть
- •План лекции
- •1 Как работает оконное приложение вWindows
- •2 Добро пожаловать вQt
- •2.1 Сигналы и слоты
- •2.2 Как обратиться из кода обработчика к элементам управления
- •2.2.1 Именование элементов управления
- •2.2.2 Практика
- •2.3 Как показать сообщение
- •2.3.1 Текст заголовков окон
- •2.3.2 Практика
- •2.4Htmlтеги
- •3.1 Создание дополнительных окон
- •3.2 Передача данных окнам
- •Void Initialize(int age);
- •Void InputAgeDialog::Initialize(int age)
- •3.3 Получение данных от формы
- •Int GetAge() const;
- •Virtual void done(int code);
- •If (!ageIsInt)
- •5 Компоновка (Layout)
Кучук Сергей Александрович
Белорусский Государственный Университет Информатики и Радиоэлектроники
Конструирование программ
Лекции
2 Часть
Лекция 3 – Знакомство с QT
План лекции
1 Как работает оконное приложение в Windows 2
2 Добро пожаловать в Qt 5
2.1 Сигналы и слоты 6
2.2 Как обратиться из кода обработчика к элементам управления 6
2.2.1 Именование элементов управления 6
2.2.2 Практика 7
2.3 Как показать сообщение 7
2.3.1 Текст заголовков окон 7
2.3.2 Практика 8
2.4 Html теги 9
3 Окна 9
3.1 Создание дополнительных окон 9
3.2 Передача данных окнам 11
3.3 Получение данных от формы 13
3.4 Как обработать ситуацию, когда диалог закрыли, не нажав на ОК 15
3.5 Проверка данных в диалоге 15
4 Добавление, удаление данных в таблицах 17
5 Компоновка (Layout) 19
Видео:http://www.youtube.com/watch?v=rjLiu8RfSaw
1 Как работает оконное приложение вWindows
Оконные приложения отличаются по структуре от консольных: ждут событий. События отправляет оконному приложению ОС «нажата клавиша», «курсор мыши передвинулся» и др. Т.е. когда на клавиатуре кнопку нажимает пользователь, то ОС как-то это распознает и отправляет текущему активному окну сообщение «нажата кнопка с таким-то кодом». Работа оконного приложения представлена бесконечным циклом обработки сообщений.
while(GetMessage(&msg,NULL,0,0))
{
…
}
Как выглядит сообщение?
typedef struct MSG {
HWND hwnd; // хэндл окна, для которого прилетело сообщение
UINT message; // код сообщения
WPARAM wParam;// доп аргументы сообщения
LPARAM lParam;//
DWORD time; // время помещения сообщения в очередь
POINT pt; // координаты курсора
}
Было много кода по созданию элементов управления, а также огромное количество кода внутри приложения по обработке всех этих событий. UIписать было мучительно долго: трудоемкость отпугивала этим заниматься. Код выглядел как-то так.
дескрипторОкна = ОС, создай окно!
дескрипторМетки = ОС, создай поле ввода на таком-то дескрипторе окна.
ОС, подвинь элемент управления(дескрипторМетки, координаты)
…
С конца 90-х, ситуация улучшилась.
Появились дизайнеры окон, в которых человек накидывал элементы управления, задавал их расположение и свойства, а дизайнер в дальнейшем генерировал код по созданию окна. Когда затем программист вновь переключался на дизайн окна, дизайнер разбирал сгенерированный им же код по созданию окна и показывал окно так, чтобы его можно было легко мышкой изменить.
Также дескрипторы элементов управления и операции, с ними связанные, обернули в виде классов «Кнопка», «Поле ввода» и др (можете взглянуть на панель инструментов на рисунке). Программист мог больше не думать, что такое дескриптор, как правильно выставить высоту и ширину, что делать, если шрифт выставлен текста большой в системе, как внутри все устроено и про другие вещи. Он мог быстро набросать форму и начать заниматься ее логикой.
Дизайнер генерирует код формы как наследник от класса Окно, базового класса, который скрывает внутри себя общение с ОС через цикл сообщений и другие аспекты, про которые также программисту больше не приходилось думать. Для создания окон больше не приходилось заводить глобальные переменные и использовать процедурно-ориентированное программирование.
Глобальный цикл обработки событий, в котором было много логики, спрятали от программиста, элементы управления позволяют подписаться на события в их жизни: например, кнопка имеет событие «ПоМнеКликнули», подписка выглядит как просьба элементу управления, «Кнопка, когда по тебе кликнут, вызови, пожалуйста, вон тот метод из класса окна!». Методы, которые обрабатывают события в жизни элемента управления, назвали «обработчики события». Регистрацию обработчиков события возложили на дизайнер формы: в нем можно указать, хочу, чтобы по нажатии на вон ту кнопку, вызывался вот этот метод.
Это позволило сделать разработку оконных приложений простой и быстрой.