Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП - 2 часть - Лекция 3. Знакомство с QT.docx
Скачиваний:
27
Добавлен:
11.05.2015
Размер:
695.85 Кб
Скачать

Кучук Сергей Александрович

Белорусский Государственный Университет Информатики и Радиоэлектроники

Конструирование программ

Лекции

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-х, ситуация улучшилась.

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

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

Дизайнер генерирует код формы как наследник от класса Окно, базового класса, который скрывает внутри себя общение с ОС через цикл сообщений и другие аспекты, про которые также программисту больше не приходилось думать. Для создания окон больше не приходилось заводить глобальные переменные и использовать процедурно-ориентированное программирование.

Глобальный цикл обработки событий, в котором было много логики, спрятали от программиста, элементы управления позволяют подписаться на события в их жизни: например, кнопка имеет событие «ПоМнеКликнули», подписка выглядит как просьба элементу управления, «Кнопка, когда по тебе кликнут, вызови, пожалуйста, вон тот метод из класса окна!». Методы, которые обрабатывают события в жизни элемента управления, назвали «обработчики события». Регистрацию обработчиков события возложили на дизайнер формы: в нем можно указать, хочу, чтобы по нажатии на вон ту кнопку, вызывался вот этот метод.

Это позволило сделать разработку оконных приложений простой и быстрой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]