Методическое пособие по информатике
Оценка 4.6

Методическое пособие по информатике

Оценка 4.6
Занимательные материалы +5
docx
информатика +2
8 кл—11 кл +1
06.07.2017
Методическое пособие по информатике
Данное методическое пособие по информатике структурировано авторскими статьями и состоит из следующих теоретических разделов: 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=p1­p2;         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

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике

Методическое пособие по информатике