Данное методическое пособие по информатике структурировано авторскими статьями и состоит из следующих теоретических разделов:
1) Работа с элементами графического интерфейса в среде Qt Creator (Редько Е.А.): среда визуального программирования Qt, лабораторные работы, темы проектов.
2) Вычислительные машины изнутри и компьютерные сети (Летучий С.В.): современная архитектура компьютеров. Машина Фон Неймана. Архитектурный принцип машины Фон Неймана. Фундамент Internet. Упаковка. 16 система счисления. Адреса.
3) Алгоритмизация и программирование (Крупский А.В.): понятие алгоритма и исполнителя, программы. Виды алгоритмов.Способы представления алгоритмов. Среда «Исполнители». Примеры решения задач.
В каждом разделе представлен лекционный (теоретический) и практический (лабораторный, контрольные вопросы и задания) материалы.
МЕТОДИЧКА_ИНФОРМАТИКА.docx
Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
СОДЕРЖАНИЕ
Редько Е.А. Работа с элементами графического интерфейса в среде
Qt Creator....................................................................................................................4
Среда визуального программирования Qt.................................................................4
Лабораторная работа №1. Основные понятия визуального программирования
в Qt Creator...................................................................................................................7
Лабораторная работа №2. Работа с кодом программы..........................................12
Лабораторная работа №3. Менеджеры компоновки..............................................14
Лабораторная работа №4. Разработка приложения «Арифметика».....................20
Варианты темы проектов...........................................................................................23
Летучий С.В. Вычислительные машины изнутри и компьютерные сети.....24
1. Современная архитектура компьютеров. Машина Фон Неймана......................24
2. Архитектурный принцип машины Фон Неймана.................................................26
2.1. Память. Принцип линейности и однородности информации, хранимой
в памяти......................................................................................................................26
2.2. Принцип неразличимости команд и данных (принцип дуальности
информации)...............................................................................................................27
2.3. Шина управления................................................................................................28
2.4. Принцип автоматической работы......................................................................28
2.5. Принцип последовательного выполнения (последовательной работы)..........28
Контрольные вопросы и задания по теме «Архитектура».....................................29
3. Фундамент Internet.................................................................................................30
3.1. Уровни.................................................................................................................30
3.2. Обмен данными...................................................................................................31
4. Упаковка.................................................................................................................32
4.1. Биты, байты и пакеты.........................................................................................32
4.2. Инкапсуляция......................................................................................................34
4.3. Интерпретация полученных данных..................................................................35
5. Шестнадцатеричная система счисления..............................................................36
6. Адреса.....................................................................................................................36
6.1. Физические адреса..............................................................................................37
6.2. Выделение IPадреса...........................................................................................37
Задания для самостоятельной работы по теме «Network systems».......................38
Крупский А.В. Алгоритмизация и Программирование....................................40
1. Введение.................................................................................................................40
2. Алгоритмы..............................................................................................................42
3. Среда «Исполнители»............................................................................................47
Хабаровск, 2016
3 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
4. Примеры решения задач........................................................................................52
Хабаровск, 2016
4 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
Редько Е.А., старший преподаватель
кафедры математики и информационных технологий
ФГБОУ ВО ПИ ТОГУ
РАБОТА С ЭЛЕМЕНТАМИ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА
В СРЕДЕ QT CREATOR
Среда визуального программирования Qt
Qt – кроссплатформенный инструментарий разработки программного
обеспечения на языке программирования C++ с пользовательским интерфейсом.
Qt впервые вышел в свет в мае 1995 года.
Первыми разработчиками Qt стали Хаавард Норд и Эйрик ЧамбЭнг. Они
начали разработку в 1991 году, за 3 года до регистрации компании под
названием Quasar Technologies. Хаавард проявлял интерес к разработке
пользовательских графических интерфейсов на языке C++, в 1990 году Хаавард
и Эйрик работали в месте над проектом приложения для баз данных
ультразвуковых изображений. Это приложение должно было предоставлять
пользовательский графический интерфейс для операционных систем Unix,
Macintosh и Windows. Летом этого же года Хаавард предложил создать
объектноориентированную систему отображения интерфейсов и в 1991 году
Хаавард начал писать графические классы, которые позднее легли в основу Qt.
Естественно проектные решения принимались совместно с Эйриком, которому
пришла идея сигналов и слотов в приложении ставшей главной особенностью Qt.
Концепция сигналов и слотов заключается в том, что компонент (виджет)
может посылать сигналы, включающие информацию о событии (например: была
нажата кнопка, был введен текст). В свою очередь другие компоненты
принимают этот сигнал посредством специализированных функций — слотов.
Данная система хорошо подходит для описания пользовательского
графического интерфейса.
Преимуществами такой системы являются: сигнал можно соединять с
неограниченным количеством слотов; слот может принимать сообщения от
неограниченного множества сигналов; соединение сигналов и слотов можно
производить в любой точке приложения; сигналы и слоты являются
механизмами, обеспечивающими связь между объектами. Связь также может
выполняться между объектами, которые находятся в различных потоках; при
уничтожении объекта происходит автоматическое разъединение всех сигнально
слотовых связей. Это гарантирует, что сигналы не будут отправляться к
несуществующим объектам.
Также у данной концепции есть и недостатки: сигналы и слоты не
являются частью языка C++, поэтому требуются дополнительные действия
Хабаровск, 2016
5 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
перед компиляцией; отправка и прием сигналов проходит медленнее, чем
обычный вызов функции, применяемый при использовании механизма функций
обратного вызова.
Название среды разработки состоит из двух букв Q и t. Буква Q была
выбрана в качестве префикса классов, поскольку эта буква имела красивое
начертание в шрифте редактора Emacs4, которым пользовался Хаарвард, а
буква t означала (toolkit) набор инструментариев. Среда Qt лицензируется по
лицензиям GNU LGPL5 или GNU GPL6, коммерческая.
Написание исходного кода, редактирование визуальных элементов формы
разрабатываемого приложения в Qt осуществляется в приложении среды
разработки «Qt Creator» (см. Рис. 1).
Рис. 1. Окно Qt Creator в режиме дизайна
Qt Creator включает в себя такие элементы как:
Редактор — предназначен для редактирования исходного кода
разрабатываемого приложения;
Дизайнер — визуальный дизайнер окна формы оконного
приложения. В режиме дизайна разработчику становятся доступными Палитра
компонентов и Инспектор объектов;
Отладчик — элемент, позволяющий следить за выполнением
программного кода и выявлять ошибки в написании программы;
Анализ — элемент, позволяющий анализировать потребляемые
ресурсы приложение и находить неэффективные части исходного кода
приложения.
В режиме Редактора рассмотрим дерево проекта. Пустой оконный проект
состоит из пяти файлов:
– файл параметров для метаобъектного
компилятора среды Qt. В данном файле задаются списки файлов (заголовочные,
My_Project.pro
Хабаровск, 2016
6 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
исходного кода, форм, ресурсных файлов) включенных в проект и настройки
компилятора;
main.cpp – главный файл кода приложения, с которого начинается
компиляция и выполнения приложения;
формы;
mainwindow.h – заголовочный файл формы «MainWindow»,
содержит объявление класса формы содержащего основные функции, слоты,
сигналы формы;
mainwindow.cpp – файл кода функций объявленных в классе
mainwindow.ui – файл формата xml обрабатываемый элементом
среды Qt «Дизайн», в окне дизайнера производится редактирование визуальных
компонентов приложения.
Разработка внешнего вида (интерфейса) приложения выполняется с
помощью виджетов.
Этот термин происходит от «window gadget» и
соответствует элементу управления («control») и контейнеру («container») по
терминологии Windows.
Каждый виджет может настраиваться в среде Qt Creator или вручную
посредством изменения его свойств. С помощью свойств можно указать размеры
виджетов, их расположение, особенности внешнего вида и др.
Свойства виджетов в Qt Creator доступны через окно Инспектора
объектов, но их можно изменять и во время работы программы.
В качестве примера рассмотрим следующие свойства:
bool visible – видимость виджета и, соответственно, всех его
подчиненных виджетов; проверка свойства реализуется функцией bool
isVisible(); а изменение – процедурой void setVisible(bool visible);
bool enabled – способность принимать и обрабатывать сообщения от
клавиатуры и мыши: true – способно, false – нет; проверка свойства реализуется
функцией bool isEnabled(); а изменение – процедурой void setEnabled(bool
enabled);
Qt::WindowModality windowModality – тип окна: Qt::nonModal
(обычное), Qt::WindowModal (модальное); проверка свойства реализуется
функцией Qt::WindowModality windowModality (); а изменение – процедурой
void setWindowModality (Qt::WindowModality windowModality);
QRect
geometry – размеры и положение виджета относительно
родительского окна; размеры задаются прямоугольником типа QRect с
фиксированным верхним левым углом (свойства X,Y), а также шириной и
высотой (свойства width,height); при изменении размера формы размеры
виджетов могут регулироваться компоновщиком в интервале от заданных
минимального minimumSize() до максимального maximumSize(); получение
значения осуществляют с помощью функции QRect& geometry(), изменение
Хабаровск, 2016
7 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
значений процедурами void set Geometry(int x,int y,int w, int h) или void set
Geometry(QRect&);
QFont font – шрифт, которым выполняются надписи в окне;
QString objectName – имя объекта (переменной) в программе,
устанавливается процедурой
void setObjectName(), читается функцией
objectName() и используется для задания имени переменной в Qt Creator и при
отладке программ.
Хабаровск, 2016
8 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
Лабораторная работа №1. Основные понятия визуального
программирования в Qt Creator
Цель: Знакомство с базовыми понятиями среды Qt Creator, получение
навыков создания нового проекта с визуальными компонентами, сохранения,
запуска, размещения новых визуальных компонентов на форме.
Что такое виджет? Любой визуальный элемент графического интерфейса
пользователя. Этот термин происходит от «window gadget» и соответствует
элементу управления («control») и контейнеру («container») по терминологии
Windows.
Примеры виджетов: кнопка (класс QPushButton); метка (класс QLabel);
поле ввода (класс QLineEdit); числовое полесчётчик (класс QSpinBox); строка
прокрутки (класс QScrollBar).
В Qt есть около 50ти готовых классов графических элементов доступных
для использования. Родительским классом для всех виджетов является класс
QWidget. От него наследуются все главные свойства визуальных элементов.
Задание 1. Создание приложения в виде пустого окна
1)
Запустите Qt Creator. Вид ярлыка программы можно посмотреть на
Рис. 2.
Рис. 2. Ярлык программы Qt Creator
2)
→ New (Новый)
(Файл)
Создайте проект. Для этого выберите команду (см. Рис. 3) File
→ Qt4 Gui Application (GUI приложение Qt4)
Рис. 3. Вид меню и диалога выбора типа проекта
3)
В поле Name (Название) напишите имя папки с проектом (см. Рис.
4), пусть будет first, пишите английскими буквами, иначе могут быть проблемы
при компиляции.
4) В поле Create in (Создать в) введите путь к папке, в которой будет
создана папка с именем, которое вы ввели в поле Name. Внимание! В пути к
папке с проектом тоже не должно быть русских букв!
Хабаровск, 2016
9 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
Рис. 4. Диалог для ввода названия проекта и выбора места размещения
В Class name (Имя класса) пишем MyWidget, в Base Class (Базовый
5)
класс) выбираем QWidget (см. Рис. 5).
Рис. 5. Диалог для именования класса
6)
В результате создания проекта в окне редактора кода среды Qt
Creator Вы увидите иерархическую структуру файлов проекта и текст файла
mywidget.cpp (см. Рис. 6). Сохраните проект, для этого выберите команду File
(Файл) →SaveAll (Сохранить все). После каждого этапа сохраняйтесь.
Рис. 6. Текст файла mywidget.cpp
7)
Скомпилируйте программу, для этого выберите команду Build
→
Build All (Собрать все)
, также вместо этого можно нажать на
(Сборка)
кнопку с молотком в левом нижнем углу окна Qt Creator`a, или комбинацию
клавиш CTRL+B.
8)
Run (Выполнить)
Запустите программу, для этого выберите команду Build (Сборка)
→
, также вместо этого можно нажать на кнопку с
треугольником в левом нижнем углу окна Qt Creator`a, или комбинацию клавиш
CTRL+R.
9)
В результате будет запущено пустое окно (см. Рис. 7).
Хабаровск, 2016
10 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
Задание 2. Добавление виджетов и редактирование их свойств в
Рис. 7. Вид готового окна приложения
инспекторе объектов
Виджеты визуальные объекты на форме, например кнопки, поля, меню.
В этой задаче, а также во всех последующих задач лабораторной работы
№1, будет использоваться один и тот же проект. Если вы уже успели закрыть
проект, то его надо сначала открыть. Чтобы это сделать, выберите команду File
→
(Файл)
, в появившемся окне откройте файл *.pro вашего
проекта.
1)
Отредактируем форму, для этого надо сначала перейти в режим
редактирования проекта, чтобы это сделать, необходимо воспользоваться окном
файловой структуры, в котором откроем файл mywidget.ui двойным кликом на
имени файла формы (см. Рис. 8).
Open (Открыть)
Рис. 8. Файловая структура проекта
Рис. 9. Вид окна Qt Creator в режиме конструирования
2)
Добавим на форму два поля редактирования (см. Рис. 10). Для этого
перетащим с палитры компонентов на форму два Line Edit`a (виджет Line Edit
находится на вкладке Input Widgets)
11
Хабаровск, 2016 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
Рис. 10. Размещение визуальных компонентов Line Edit на форме
3)
Добавим на форму две кнопки (см. Рис. 11), для этого перетащим с
палитры компонентов на форму два Push Button`a (виджет Push Button
находится на вкладке Buttons)
4)
Рис. 11. Размещение визуальных компонентов Push Button на форме
Отредактируем имена кнопок и текстовых полей. Для этого
выделите кнопку, и в инспекторе объектов (см. Рис. 12) отредактируйте
свойство objectName, пусть оно будет MyPushButton1. Таким же образом
отредактируйте имя второй кнопки, пусть оно будет MyPushButton2. Таким же
образом отредактируйте имена Line Edit`ов. Пусть они будут MyLineEdit1 и
MyLineEdit2.
Рис. 12. Инспектор объектов со свойствами кнопки PushButton
5)
Отредактируем надписи на кнопках и полях редактирования. Для
этого выделите кнопку MyPushButton1 и в инспекторе объектов измените,
свойство text, пусть оно будет Copy. Таким же образом измените, свойство text
кнопки MyPushButton2 пусть оно будет Clear. Таким же образом
отредактируйте свойство text поля MyLineEdit1, пусть оно будет Source. Таким
Хабаровск, 2016
12 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
же образом отредактируйте свойство text поля MyLineEdit2, пусть оно будет
Destination.
6)
Убедитесь, что все правильно сделали. Посмотрите на форму (см.
Рис. 13): на одной кнопке должна быть надпись Copy, на другой Clear. В одном
поле редактирования должен быть текст Source, в другом Destination.
7)
8)
Рис. 13. Вид формы с компонентами после изменения свойства Text
Выполняем сохранение проекта (CTRL+SHIFT+S).
Компилируем программу (CTRL+B), запускаем проект на
исполнение (CTRL+R). Подведем итоги: мы научились изменять свойства
компонентов при помощи object inspector`а. Научились переименовывать
компоненты (имя – это идентификатор, по которому в дальнейшем к объекту
можно обращаться программно) и менять надписи на них (надпись – это
визуальное свойство, отвечающее за внешний вид виджета).
Задание для самостоятельной работы. Изучите свойства компонентов и
составьте отчет в виде таблицы 1.
Таблица 1. Свойства компонентов
Назначение
(за что отвечает?)
Виджет
Свойство
Тип значения
Push Button
Enabled
Font
Cursor
Radio Button Checked
Text Label
frameShape
frameShadow
aligment
wordWrap
windowTitle
MyWidget
Задание 3. Изменение свойств виджетов из кода
1)
Добавим на форму метку. Для этого из палитры компонентов
перетащим на форму компонент Label (он находится на вкладке Display
Widgets). Переименуем его, для этого в инспекторе объектов в свойство
objectName напишем MyLabel.
2)
Увеличим нашу метку, чтобы в нее вмещался более длинный текст.
Для этого схватим ее край мышкой и потянем вправо или влево, чтобы она стала
шире.
Хабаровск, 2016
13 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
3)
Изменим из кода надпись на MyLabel. Для этого откроем файл
mywidget.cpp. Там, в конструкторе класса MyWidget, после строки:
После этого файл mywidget.cpp должен выглядеть так:
→
setText("My first programm");
→
→
setupUi(this);
ui
добавим строчку: ui MyLabel
4)
#include "mywidget.h"
#include "ui_mywidget.h"
MyWidget::MyWidget(QWidget *parent)
{
: QWidget(parent), ui(new Ui::MyWidget)
ui>setupUi(this);
ui>MyLabel>setText("My first programm");
}
MyWidget::~MyWidget()
{
delete ui;
Скомпилируйте программу
Запустите программу и проверьте надпись на метке.
}
5)
6)
Хабаровск, 2016
14 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
Лабораторная работа №2. Работа с кодом программы
Цель:
Изучить систему сигналовслотов; научиться программно
обращаться к свойствам объектов; настраивать «поведение» объектов.
Сигналы и слоты используются для коммуникации между объектами.
Механизм сигналов и слотов главная особенность Qt. Сигнал вырабатывается,
когда происходит определенное событие. Слот – это функция, которая
вызывается в ответ на определенный сигнал. Виджеты Qt имеют много
предопределенных сигналов и слотов, но мы всегда можем сделать дочерний
класс и добавить наши сигналы и слоты в нем.
Как связать сигнал со слотом?
При помощи функции QObject::connect(). Функция QObject::connect()
выглядит следующим образом: QObject::connect (отправитель, SIGNAL (сигнал
(список параметров сигнала)), получатель, SLOT (список параметров сигнала));
где отправитель и получатель являются указателями на объекты и где сигнал и
слот являются членами этих объектов. Список параметров сигнала пишется без
имен переменных. SIGNAL() и SLOT() макросы.
Следует обратить внимание на то, что сигнал и слот должны иметь
одинаковые параметры!
Примечание: Если вызов происходит из класса, унаследованного от QObject, тогда
QObject:: можно опустить. То есть написать так: connect(отправитель, SIGNAL(сигнал
(список параметров сигнала)), получатель, SLOT(список параметров сигнала)).
Задание 1. Настраиваем поведение объектов формы
1)
2)
Продолжаем работу в проекте first.
Сделаем, чтобы при нажатии на кнопку с надписью Clear, очищались
поля ввода. Для этого откроем Редактор сигналов и слотов (Signals and slots
editor), нажмем на «плюс» и в образовавшейся записи, в поле Sender
(отправитель сигнала) выберем MyPushButton2. В поле Signal (сигнал) выберем
Clicked(). В поле Receiver (получатель сигнала) выберем MyLineEdit1. В поле
Slot (слот) выберем Clear(). Еще раз нажмем на «плюс», сделаем так же как
написано выше, только в поле Receiver выберем MyLineEdit2. Сравните свой
результат с рисунком 1.
Рис. 14. Редактор сигналов и слотов
3)
4)
Скомпилируйте программу (CTRL+B)
Запустите программу (CTRL+R), нажмите на кнопку Clear. Оба поля
должны очиститься.
Хабаровск, 2016
15 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
5)
Подведем итоги: мы научились в окне редактора сигналов и слотов
(Signals and slots editor) подключать стандартные сигналы к стандартным
слотам. Этим способом можно настроить поведение формы, не написав ни одной
строчки кода. Это выгодно отличает Qt от C++ Builder`a и Delphi. Например,
чтобы очищать поля по нажатию кнопки в Delphi или C++ Builder`e, нам бы
пришлось создавать обработчик нажатия кнопки, а в нем писать код, который
будет очищать текстовые поля. А в Qt мы можем это сделать не загромождая
«исходник» лишними обработчиками событий.
Задание 2. Создаем обработчики событий
1)
Создадим прототип своего слота, для этого откроем файл
mywidget.h. В конец класса добавим: public slots: void MyEventHandler();
Прототипы слотов надо размещать в разделе public slots, если вам нужен
публичный слот, или в разделе private slots, если нужен приватный слот и т.д.
После этого файл mywidget.h должен выглядеть так (Рис. ):
Рис. 2. Добавление заголовка функциислота
Макрос Q_OBJECT необходимо писать в начале определения любого
класса, содержащего сигналы или слоты. В наш «исходник» этот макрос уже был
добавлен автоматически.
2)
Создадим тело слота, для этого откроем файл mywidget.cpp. В его
конец добавим:
void MyWidget::MyEventHandler()
{
→
→
→
ui MyLineEdit2 setText(ui MyLineEdit1 text());
→
}
Хабаровск, 2016
16 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
3)
Свяжем сигнал со слотом, для этого в конец конструктора
MyWidget (в файле mywidget.cpp), добавим:
QObject::connect(ui MyPushButton1,
SIGNAL(clicked()), this, SLOT (MyEventHandler()));
→
После всех изменений файл mywidget.cpp должен выглядеть так (Рис. ):
4)
5)
Рис. 3. Описание тела функции слота и связывание сигнала со слотом
Компилируем программу (CTRL+B)
Запускаем программу (CTRL+R), в поле source вводим любой текст
и нажимаем кнопку Copy. Текст из поля source должен скопироваться в поле
Destination.
6)
Подведем итоги: Мы научились создавать свой собственный слот, и
связывать его с сигналом.
Лабораторная работа №3. Менеджеры компоновки
Цель: Изучить компоненты классов QHBoxLayout, QVBoxLayout –
горизонтальный и вертикальный менеджеры компоновки, отвечающие за
размещение и масштабирование подчиненных виджетов в окне приложения.
Общие сведения:
При создании окна приложения на базе любого из классов окон возникает
проблема управления расположением окон виджетов в окне приложения. Qt
предусматривает два способа решения этой проблемы: задание координат
каждого виджета вручную, например, посредством метода setGeometry();
использование специальных невидимых пользователю менеджеров компоновки.
В первом варианте при изменении размеров окна приложения пересчет
геометрических параметров виджетов должен выполняться вручную.
Что такое менеджер компоновки?
Хабаровск, 2016
17 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
Это объект, который устанавливает размер и положение виджетов,
которые располагаются в зоне его действия. Qt имеет три основных класса
менеджеров компоновки:
QHBoxLayout размещает виджеты по горизонтали слева направо
(или справа налево, в зависимости от культурных традиций);
QVBoxLayout размещает виджеты по вертикали сверху вниз;
QGridLayout размещает виджеты в ячейках сетки.
Задание 1. Размещение виджетов вручную без компоновщика.
1)
2)
3)
Создайте новый проект с названием primer3_1.pro.
В иерархической структуре проекта откройте файл main.cpp.
В разделе директив препроцессору подключите библиотеку
qlineedit.h (см. Рис. 15, строка 3)
4)
В тексте главной функции после объявления переменной w класса
Window (название класса может отличаться, оно задавалось на этапе создания
проекта) динамически создаем два поля ввода edit1 и edit2 и устанавливаем их
геометрические параметры вручную (см. Рис. 15, строки 11, 12)
Рис. 15. Скан файла main.cpp – динамическое создание виджетов и их
геометрических параметров
5)
Проведите сборку проекта (CTRL+B) и запуск программы
(CTRL+R).
6)
В результате на экране появляется окно, содержащее оба
однострочных редактора (см. Рис. 16, а).
Рис. 16. Вид окна с двумя редакторами LineEdit в нормальном (а) и
свернутом (б) состоянии
Хабаровск, 2016
18 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
Однако на рисунке 2, б видно, что попытка уменьшения размера окна
приводит к нарушению внешнего вида, в результате которого виджеты вообще
могут исчезнуть из поля зрения.
Следовательно, при ручной компоновке пришлось бы программировать,
как должен изменяться внешний вид окна при изменении его размеров.
В отличие от ручного варианта при компоновке с использованием
менеджеров компоновки осуществляется автоматическая перестройка внешнего
вида окна в зависимости от его размеров.
Для управления размещением виджетов на форме Qt Designer использует
компоновщики. Для добавления компоновщика, компонуемые виджеты должны
быть выделены, что можно сделать, щелкая мышкой по виджетам при нажатой
клавише CTRL.
Добавление компоновщиков и связывание с ними виджетов
осуществляется выбором пунктов меню:
Tools\Form\Layout Horizontally – компоновать по горизонтали
(CTRL+H),
Tools\Form\Layout Vertically – компоновать по
вертикали
(CTRL+V),
Tools\Form\Layout in a Grid – компоновать по сетке (CTRL+G),
или нажатием соответствующих кнопок на панели компонентов дизайнера:
Обратите внимание, что связывание главного компоновщика с окном
происходит, если выбрать горизонтальную или вертикальную компоновку при
отсутствии выделенных виджетов.
Задание 2. Знакомство с компоновщиками в режиме конструирования
формы
1)
2)
Откройте ваш проект first.pro.
Выделите одновременно два поля ввода LineEdit (используя
зажатую клавишу CTRL)
Рис. 17. Одновременное выделение двух виджетов
Выберите действие «Скомпоновать по горизонтали» в редакторе
3)
форм (или CTRL+H)
Хабаровск, 2016
19 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
Рис. 18. Компоновка виджетов через редактор форм
4)
5)
Аналогичным образом скомпонуйте две кнопки PushButton.
Окно приложения (при отсутствии выбранных виджетов) –
компонуем по вертикали (CTRL+V). Сравните результат (см. Рис. 19)
Рис. 19. Окно формы, в котором виджеты скомпонованы
6)
Скомпилируйте проект и запустите его. Подцепите край окна
мышкой и измените размер окна. Вы увидите, что размеры кнопок и полей ввода
изменяются автоматически.
7)
Теперь можно объяснить все проделанные действия. Внутри
менеджера компоновки виджеты изменяют размер автоматически, но требуется
указать главный менеджер компоновки для формы.
Внутри главного менеджера компоновки Вы можете вкладывать другие
менеджеры компоновки, комбинировать их, использовать распорки. Вы должны
помнить главное: все дополнительные менеджеры компоновки и распорки
должны располагаться внутри главного менеджера компоновки.
Задание 3. Создание компоновщиков из кода
Напомним, что в Qt предусмотрены следующие элементы компоновки:
Хабаровск, 2016
20 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
QVBoxLayout
– вертикальный компоновщик – управляет
расположением виджетов в окне по вертикали;
QHBoxLayout – горизонтальный компоновщик – управляет
расположением виджетов в окне по горизонтали;
QGridLayout – табличный компоновщик – управляет расположением
виджетов в направляющей двумерной сетке – матрице или таблице.
1)
2)
3)
Откройте снова проект primer3_1.pro.
В иерархической структуре проекта откройте файл main.cpp.
Объявим переменную w класса QWidget (центральный виджет –
окно) (см. Рис. 20, строка кода 9)
4)
Подключим библиотеку компоновщиков qlayout.h (см. Рис. 20,
строка кода 4)
5)
В тексте главной функции после динамически созданных полей
ввода создадим компоновщик layout класса QHBoxLayout (выравнивание по
горизонтали) (см. Рис. 20, строка кода 12).
6)
Установим значения параметров компоновщика: внешние поля,
просвет между виджетами (см. Рис. 20, строки кода 13, 14)
7)
кода 15)
8)
Свяжем компоновщик layout с виджетом окна w (см. Рис. 20, строка
Зададим порядок следования элементов внутри компоновщика (см.
Рис. 20, строки кода 16, 17)
Рис. 20. Скан файла main.cpp – динамическое создание горизонтального
В результате работы приложения получаем интерфейс, который при
компоновщика
9)
изменении размеров окна сохраняет пропорции (см. Рис. 21).
Хабаровск, 2016
21 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
Рис. 21. Внешний вид интерфейса при автоматической компоновке виджетов:
а) в нормальном состоянии; б) в свернутом состоянии
Задание для самостоятельной работы:
1.
2.
3.
4.
5.
Изучите элемент вертикальной компоновки.
Изучите табличный компоновщик.
Изучите действие элемента «пружины».
Изучите действие разделителя («ползунка»).
Составьте окно с виджетами, скомпонованными различным образом.
Объедините все компоновщики с помощью вложения в главный компоновщик
окна.
Дополнительная информация:
Табличная компоновка предполагает задание координат размещения
компонентов с точностью до клетки. При этом допускается размещать виджет в
нескольких клетках. Для добавления виджетов в менеджер компоновки
используют специальный метод, позволяющий указать область таблицы, которую
должен занимать элемент (см. Рис. 22).
Рис. 22. Метод добавления виджета в табличный компоновщик
В качестве примера рассмотрим сетку, в которой размещены три поля
ввода (см. Рис. 23):
первое поле занимает две ячейки, начиная с нулевой, в нулевой
строке layout>addWidget(edit1,0,0,1,2);
второе поле занимает одну ячейку, начиная с нулевой, в первой
строке сетки layout>addWidget(edit2,1,0,1,1);
третье поле ввода занимает одну ячейку, начиная с первой, в первой
строке layout>addWidget(edit3,1,1,1,1);
Хабаровск, 2016
22 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
Рис. 23. Пример создания табличного компоновщика и добавления в него
виджетов
Для добавления пружины используют метод addStretch класса
QBoxLayout, например layout>addStretch();. Эффект использования пружины:
размер окон редакторов и расстояние между строчными редакторами
минимально независимо от размеров окна.
Вместо менеджеров компоновки, которые обычно используют политики
пропорционального изменения размеров виджетов при изменении размеров
форм, можно использовать разделители QSplitter, которые позволяют
регулировать размеры виджетов по желанию пользователя.
Разделители бывают вертикальными и горизонтальными. Их применяют в
качестве объекта основы окна или его фрагмента (см. Рис. 24). В результате
форма создается как объект класса QSplitter, благодаря чему появляется линия
между двумя полями ввода – ползунок, потянув за который можно изменить
соотношение областей, отведенных по каждое поле ввода.
Рис. 24. Создание разделителя splitter (ползунка)
Компоновщики всех рассмотренных типов могут вкладываться один в
другой в соответствии с реализуемой схемой окна. Однако при добавлении
Хабаровск, 2016
23 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
компоновщика в контейнер другого компоновщика используется не метод
addWidget(), а метод addLayout(), например: layout2>addLayout(layout1).
Лабораторная работа №4. Разработка приложения «Арифметика»
Цель:
изучить порядок использования виджетовпереключателей
RadioButton, реализующих выбор действия.
1)
Выполните проектирование формы в соответствии с образцом (см.
Рис. 25). На форме размещены два поля ввода LineEdit, четыре переключателя
RadioButton, кнопка PushButton, метка Label. Для переключателей выполнено
вертикальное выравнивание с помощью менеджера компоновки VerticalLayout.
2)
Для виджетов данного приложения необходимо задать следующие
Рис. 25. Форма приложения «Калькулятор»
имена – свойство name (см. Таблица 2)
Таблица 2. Свойства виджетов для приложения «Калькулятор»
Виджет
LineEdit
LineEdit_2
RadioButton
RadioButton_2
RadioButton_3
RadioButton_4
PushButton
Label
Значение свойства name
op1
op2
rb1
rb2
rb3
rb4
rez_button
rez_label
3)
Выполним объектную декомпозицию для данного приложения.
Источником сигнала в данном приложении будет кнопка PushButton. По
нажатию на кнопку должны происходить следующие действия:
считывание данных из полей ввода LineEdit: op1 и op2;
проверка их на допустимые числовые значения;
проверка выбранного переключателя RadioButton: rb1>checked, rb2
>checked, rb3>checked, rb4>checked;
Хабаровск, 2016
24 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
непосредственно расчет результата и вывод в соответствующую
метку rez_label.
4)
Прежде чем связывать сигнал со слотом, необходимо написать слот
– функцию. Для этого:
4.1. Создаем прототип своего слота. Откроем файл mainwindow.h. В
конец класса добавим:
public slots: void calc();
4.2. Создадим тело слота, для этого откроем файл mainwindow.cpp. В
его конец добавим:
void MainWindow::calc()
{
QString s1, s2, rez;
s1=ui>op1>text();
s2=ui>op2>text();
bool ok1,ok2;
double p1,p2,r;
p1=s1.toDouble(&ok1);
p2=s2.toDouble(&ok2);
if (ok1&&ok2)
{
if (ui>rb1>isChecked()) r=p1+p2;
if (ui>rb2>isChecked()) r=p1p2;
if (ui>rb3>isChecked()) r=p1*p2;
if (ui>rb4>isChecked()) if (p2!=0)
r=p1/p2;
else
{
QMessageBox
msgBox1(QMessageBox::Information,
"Not correct",
"Division by null!",
QMessageBox::Ok);
msgBox1.exec();
}
rez.setNum(r);
ui>rez_label>setText("Rezalt = "+rez);
}
else
{
QMessageBox
msgBox2(QMessageBox::Information,
"Not correct",
"Not numeric format!",
QMessageBox::Ok);
msgBox2.exec();
}
}
Хабаровск, 2016
25 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
4.3. Свяжем созданный слот с сигналом нажатия на кнопку:
QObject::connect(ui>rez_button,SIGNAL(clicked()),
this, SLOT (calc()));
4.4. В итоге получим следующий файл mainwindow.cpp (см. Рис. 26):
Рис. 26. Текст файла mainwindow.cpp
Задание для самостоятельной работы.
Составьте новый проект
соответствующий названию, самостоятельно определив количество виджетов и
их свойства (учитывайте, что для ввода данных используется LineEdit, для
вывода результата – TextLabel). Установку текстовых значений меток
выполните программно.
Хабаровск, 2016
26 Методическое пособие по информатике Редько Е.А., Летучий С.В., Крупский
А.В.,
Расчетные величины вычисляются по нажатию на кнопку. Для этого
создайте функциюслот, которая запускается кнопкой «Вычислить» и выполняет
следующие действия:
производит чтение исходных данных из полей ввода в переменные,
вычисляет результат решения задачи,
записывает результат в метку.
Для размещения виджетов используйте менеджеры компоновки.
Варианты тем проектов:
1)
Проект «Обмен валюты». Необходимо учесть два варианта обмена:
покупку валюты и продажу.
2)
Проект «Решение уравнений». Необходимо предусмотреть решение
двух типов уравнений – линейного и квадратичного.
3)
Проект «Вычисление площади фигуры». Предусмотреть выбор
фигур из вариантов: прямоугольник, треугольник или круг.
4)
Проект «Расчет стоимости путевки». Пользователь имеет
возможность выбрать место отдыха.
5)
Проект «Приветствие». Пользователю предлагается ввести свое имя,
после чего программа приветствует его по имени на одном из языков.
6)
7)
8)
9)
Проект «Вычисление НОД или НОК».
Проект «Угол часовой стрелки».
Проект «Сумма цифр трехзначного числа».
Проект «Объем информации в байтах». Пользователь имеет
возможность выполнить сжатие файла.
Хабаровск, 2016
27
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Методическое пособие по информатике
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.