Кафедра ИСиТ УО ВГТУ
  • Специальности
    • Экономика электронного бизнеса
    • Информационные системы
    • Information Control Systems
  • Каталог
  • Сайт кафедры
  • Сервисы
    • GitLab
    • JupyterHub
    • Soft
  1. ИСиТ
  2. ПСП
  3. Практика
  4. Лаб. работа “Библиотеки и средства внедрения визуальных компонент для организации GUI-интерфейсов пользователя. Обработка событий”
  • ИСиТ
    • АОС
      • Теория
        • Введение в операционные системы
        • Управление памятью
        • Управление процессами
        • Система ввода-вывода
        • Информационная безопасность
        • Виртуализация
      • Слайды
      • Практика
    • РВПсИПП
      • Теория
        • Настройка среды разработки для PHP
        • Введение в PHP
        • Работа с базами данных в PHP
        • Объектно-ориентированные возможности PHP
        • Разработка web-приложений на базе фреймворков
        • Основы Laravel
        • Шаблоны в Laravel
        • Модели и базы данных в Laravel
        • Формы и валидация в Laravel
        • Аутентификация и авторизация в Laravel
        • Создание REST API в Laravel
        • Работа с файлами и изображениями в Laravel
        • Тестирование и отладка в Laravel
        • Введение в фреймворк Symfony
        • Маршруты и контроллеры в Symfony
        • Шаблоны и Twig в Symfony
        • Формы и валидация в Symfony
        • Доступ к базам данных в Symfony
        • Аутентификация и авторизация в Symfony
        • Сервисы и зависимости в Symfony
        • Создание REST API в Symfony
        • Работа с файлами и медиа в Symfony
        • Сравнение и выбор фреймворка
        • Развертывание веб-приложения
      • Практика
        • Регистрация в JupyterHub
        • Лаб. работа “Основы PHP”
        • Лаб. работа “Массивы в PHP”
        • Лаб. работа “Создание веб-приложений с использованием Slim”
        • Лаб. работа 1 “Создание нового приложения Laravel”
        • Лаб. работа 2 “Добавление главной страницы и базовых маршрутов”
        • Лаб. работа 3 “Создание моделей, миграций и сидеров”
        • Лаб. работа 4 “Создание индексных страниц и пагинация”
        • Лаб. работа 5 “Создание форм для работы с сущностями”
        • Лаб. работа 6 “Работа с файлами (эмуляция S3-хранилища)”
        • Лаб. работа “Создание маршрутов в Laravel”
        • Лаб. работа “Работа с базами данных в Laravel”
        • Лаб. работа “Работа с формами в Laravel”
        • Лаб. работа “Аутентификация и авторизация в Laravel”
        • Лаб. работа “Работа с файлами в Laravel”
        • Лаб. работа “Тестирование и оптимизация в Laravel”
        • Лаб. работа “Создание REST API в Laravel”
        • Лаб. работа “Основы Symfony”
        • Лаб. работа “Шаблоны и представления в Symfony”
        • Лаб. работа “Работа с базами данных в Symfony”
        • Лаб. работа “Формы и аутентификация в Symfony”
        • Лаб. работа “Сервисы и зависимости в Symfony”
        • Лаб. работа “REST API в Symfony”
        • Лаб. работа “Работа с медиа контентом в Symfony”
        • Лаб. работа “Создание и развертывание проекта”
        • Расчетно-графическая работа: Разработка веб-приложения с использованием Laravel
          • Методические рекомендации по выполнению работы
          • Варианты заданий для расчетно-графической работы
    • ПСП
      • Теория
        • Введение
        • Протокол HTTP
        • Программирование с использованием сокетов
      • Практика
        • Программное обеспечение
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Обзор базовых конструкций и основных элементов языка”
        • Лаб. работа “Структурные элементы класса, методы взаимодействия объектов и организация наследования”
        • Лаб. работа “Типы исключительных ситуаций и процесс их обработки”
        • Лаб. работа “Потоки ввода/вывода и работа с файлами”
        • Лаб. работа “Организация потоков, параллельной обработки, синхронизации и распределённой обработки синхронизуемых участков кода”
        • Лаб. работа “Структурные механизмы языка программирования для реализации полиморфизма в программах”
        • Лаб. работа “Средства языка для организации работы в сети. Основные классы и интерфейсы реализации сетевого взаимодействия”
        • Лаб. работа “Библиотеки и средства внедрения визуальных компонент для организации GUI-интерфейсов пользователя. Обработка событий”
        • Лаб. работа “Концепция распределённой обработки данных и технологии удалённой обработки данных”
      • Темы курсовых проектов по дисциплине “Программирование сетевых приложений”
    • Компьютерные сети
      • Теория
        • Введение в компьютерные сети
        • Топологии сетей
        • Кодирование и мультиплексирование
        • Стеки протоколов
        • Адресация в компьютерных сетях
        • Система доменных имен (DNS)
        • Программирование с использованием сокетов
        • Введение в PHP
        • Протокол HTTP
        • Введение в компьютерные сети
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб работа “Массивы в PHP”
    • РиОИИС
      • Слайды
      • Теория
        • Классификация оптимизационных задач
        • Генетические алгоритмы
        • Системы массового обслуживания
        • Теория игр
        • Машинное обучение
        • Глубокое обучение (Deep learning)
        • Основы функционального программирования
        • Основы программирования на Haskell
        • Введение в логическое программирование
        • Инференция и рассуждения в логическом программировании
        • Разработка экспертных систем
        • Интеллектуальные системы и их архитектура
        • Веб-скрэйпинг
        • Сбор данных с открытых API
      • Практика
        • JupyterHub
        • Лаб. работа “Основы программирования на Python”
        • Лаб. работа “Функции в Python”
        • Лаб. работа “Рекурсия в Python”
        • Лаб. работа “Итераторы в Python”
        • Лаб. работа “Методы одномерной оптимизации”
        • Лаб. работа “Методы многомерной оптимизации”
        • Лаб. работа “Линейное программирование”
        • Лаб. работа “Генетические алгоритмы”
        • Лаб. работа “Haskell”
        • Лаб. работа “Логическое программирование”
        • Лаб. работа “Сбор данных с помощью веб-скрейпинга”
        • Лаб. работа “Предобработка данных”
        • Лаб. работа “Машинное обучение: классификация”
        • Лаб. работа “Создание и обучение простейших нейронных сетей”
        • Лаб. работа “Системы массового обслуживания”
        • Лаб. работа “Обработка естественного языка”
        • Лаб. работа “Компьютерное зрение”
        • Лаб. работа “Нейросети и глубокое обучение”
    • КСКР
      • Практика
        • Лаб. работа “Одномерные и двумерные массивы в C#”
        • Лаб. работа “Обращение матриц в C#”
    • Системное программирование
      • Слайды
      • Слайды
      • Теория
        • Управление памятью в Windows
        • Файловые операции в Windows
        • Управление процессами в Windows
        • Графический интерфейс Windows
        • ОС Unix
      • Практика
        • Лаб. работа “Работа с динамической памятью в Windows”
        • Лаб. работа “Операции с файлами в Windows”
        • Лаб. работа “Управление процессами в Windows”
        • Лаб. работа “Работа с виртуальной машиной Linux”
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Работа с файлами в Linux”
        • Лаб. работа “Работа с процессами в Linux”
    • ИППРПО
      • Теория
      • Практика
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Управление процессами в Shell”
        • Лаб. работа “Управление файловой системой в Shell”
        • Лаб. работа “Управление пакетами в ОС Linux”
        • Лаб. работа “Сетевые инструменты в Linux”
        • Лаб. работа “Мониторинг и анализ системы Linux”
        • Лаб. работа “Основы Docker. Управление контейнерами”
        • Лаб. работа “Docker: Сети”
        • Лаб. работа "Docker: Образы"
        • Лаб. работа “Docker Compose: Управление многоконтейнерными приложениями”
        • Лаб. работа “CI/CD с GitLab”

Содержание

  • Цель работы
  • Теоретические сведения
    • Основные виджеты Qt Widgets
    • Менеджеры компоновки
    • Сигналы и слоты для виджетов
    • QAction и меню
    • Строка состояния
    • Конфигурация CMake
  • Задание для выполнения
    • Требования к программе
    • Примерный внешний вид
  • Индивидуальные задания
    • Вариант 1. Клиент сетевого калькулятора
    • Вариант 2. Мессенджер
    • Вариант 3. Клиент справочника DNS
    • Вариант 4. Клиент погоды
    • Вариант 5. Клиент конвертера валют
    • Вариант 6. Клиент TO-DO списка
    • Вариант 7. Клиент телефонного справочника
    • Вариант 8. Клиент хранилища KV (ключ—значение)
    • Вариант 9. Клиент генератора паролей
    • Вариант 10. Клиент конвертера систем счисления
    • Вариант 11. Клиент файлового менеджера (имитация)
    • Вариант 12. Клиент голосования
    • Вариант 13. Клиент системы логирования
    • Вариант 14. Клиент чата (многоклиентский)
    • Вариант 15. Клиент системного монитора
    • Вариант 16. Клиент генератора случайных чисел
    • Вариант 17. Клиент статистики текста
    • Вариант 18. Клиент трансформации текста
    • Вариант 19. Клиент анаграмм
    • Вариант 20. Клиент сервера времени
  • Порядок выполнения
  • Контрольные вопросы
  • Содержание отчёта
  1. ИСиТ
  2. ПСП
  3. Практика
  4. Лаб. работа “Библиотеки и средства внедрения визуальных компонент для организации GUI-интерфейсов пользователя. Обработка событий”

Лаб. работа “Библиотеки и средства внедрения визуальных компонент для организации GUI-интерфейсов пользователя. Обработка событий”

Программирование сетевых приложений
Практика
Автор

Бизюк Андрей

Дата публикации

9 апреля 2026 г.

Цель работы

Освоить создание графического интерфейса с использованием библиотеки Qt Widgets. Разработать интерфейс простого мессенджера: размещение виджетов с помощью менеджеров компоновки, визуальное проектирование и обработка событий через механизм сигналов и слотов.

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

Основные виджеты Qt Widgets

Класс Назначение
QWidget Базовый класс всех виджетов
QMainWindow Главное окно приложения
QPushButton Кнопка
QLineEdit Однострочное текстовое поле
QTextEdit Многострочное текстовое поле
QLabel Текстовая метка
QListWidget Список элементов
QComboBox Выпадающий список
QMenuBar / QMenu Меню
QStatusBar Строка состояния
QDialog Диалоговое окно

Менеджеры компоновки

// Вертикальная компоновка
QVBoxLayout* layout = new QVBoxLayout(this);
layout->addWidget(new QLabel("Сообщение:"));
layout->addWidget(textEdit);
layout->addWidget(sendButton);

// Горизонтальная компоновка
QHBoxLayout* hLayout = new QHBoxLayout();
hLayout->addWidget(inputLine);
hLayout->addWidget(sendButton);

// Вложенные компоновки
QVBoxLayout* mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(chatDisplay);    // основной виджет
mainLayout->addLayout(hLayout);        // вложенный горизонтальный

Сигналы и слоты для виджетов

// Кнопка
connect(sendButton, &QPushButton::clicked, this, &MainWindow::onSend);

// Ввод текста — нажатие Enter
connect(inputLine, &QLineEdit::returnPressed, this, &MainWindow::onSend);

// Изменение текста
connect(inputLine, &QLineEdit::textChanged, this, &MainWindow::onTextChanged);

QAction и меню

// Создание меню
QMenuBar* menuBar = this->menuBar();
QMenu* fileMenu = menuBar->addMenu("Файл");

QAction* connectAction = fileMenu->addAction("Подключиться");
connect(connectAction, &QAction::triggered, this, &MainWindow::onConnect);

QAction* exitAction = fileMenu->addAction("Выход");
connect(exitAction, &QAction::triggered, this, &QWidget::close);

Строка состояния

statusBar()->showMessage("Готов к работе");
// или
statusLabel = new QLabel("Отключен");
statusBar()->addPermanentWidget(statusLabel);

Конфигурация CMake

find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Network)
target_link_libraries(Lab8 PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Network)
set(CMAKE_AUTOMOC ON)

Задание для выполнения

Создать графический интерфейс мессенджера с использованием Qt Widgets. Интерфейс должен позволять подключаться к эхо-серверу (из лабораторной работы №7), отправлять и получать сообщения.

Требования к программе

Структура главного окна MainWindow (наследник QMainWindow):

  1. Меню (QMenuBar):

    • «Соединение» → «Подключиться…» (диалог ввода IP и порта), «Отключиться», разделитель, «Выход»
    • «Журнал» → «Очистить», «Сохранить в файл…»
  2. Центральная область — разделена на три части:

    Левая панель — информация о подключении:

    • QLabel «Сервер:» + QLabel для отображения IP:порта
    • QLabel «Статус:» + QLabel для отображения статуса (подключён/отключён)
    • QLabel «Отправлено:» + QLabel (счётчик сообщений)
    • QLabel «Получено:» + QLabel (счётчик сообщений)

    Центральная панель — область чата:

    • QTextEdit (только для чтения, setReadOnly(true)) — отображение истории сообщений. Сообщения форматировать: [HH:MM:SS] >> текст отправленного сообщения и [HH:MM:SS] << текст полученного сообщения разными цветами (синий для отправленных, зелёный для полученных).

    Нижняя панель — ввод и отправка:

    • QLineEdit — поле ввода сообщения
    • QPushButton «Отправить» — отправка сообщения (также срабатывает по нажатию Enter)
  3. Строка состояния (QStatusBar):

    • Индикатор подключения (текст + цвет)

Логика:

  1. Класс MainWindow содержит QTcpSocket* для сетевого взаимодействия:
    • «Подключиться…» — открыть QDialog с полями ввода IP-адреса и порта, выполнить connectToHost()
    • «Отключиться» — disconnectFromHost()
    • «Отправить» — socket->write(), очистить поле ввода, обновить счётчик
    • readyRead — прочитать данные, добавить в историю чата, обновить счётчик
    • «Очистить» — очистить QTextEdit истории
    • «Сохранить в файл…» — QFileDialog::getSaveFileName(), запись истории в текстовый файл
  2. При отключении кнопка «Отправить» должна быть неактивна (setEnabled(false)), при подключении — активна.

Примерный внешний вид

Примерный внешний вид мессенджера

Примерный внешний вид мессенджера

Индивидуальные задания

Каждый вариант представляет собой приложение QMainWindow с меню (QMenuBar), центральной областью с виджетами ввода/отображения, строкой состояния (QStatusBar) и подключением к TCP-серверу через QTcpSocket.

Вариант 1. Клиент сетевого калькулятора

GUI: QLineEdit для первого операнда, QComboBox для операции (+, -, *, /, √, ^), QLineEdit для второго операнда (скрывается для унарных), QPushButton «Вычислить», QLineEdit для результата (только чтение), QTextEdit для истории вычислений. Левая панель: QLabel с сервером (IP:порт), QLabel статуса подключения, QLabel счётчиков (отправлено/получено). Меню: «Соединение» (Подключиться…, Отключиться, Выход), «История» (Очистить, Сохранить в файл…). Кнопка “Вычислить” неактивна при отключении. Подключение к серверу калькулятора (CALC/SQRT/POW протокол из ЛР7). Формат истории: [HH:MM:SS] 15 + 7 = 22 (синий), [HH:MM:SS] ERROR: деление на ноль (красный).


Вариант 2. Мессенджер

Интерфейс мессенджера описан в разделе «Задание для выполнения»: три панели (информация о подключении, область чата, панель ввода), подключение к эхо-серверу из ЛР7.

Меню: «Соединение» → «Подключиться…», «Отключиться», «Выход»; «Журнал» → «Очистить», «Сохранить в файл…».


Вариант 3. Клиент справочника DNS

GUI: QLineEdit для ввода доменного имени, QPushButton «Найти», QLineEdit для отображения IP-адреса (результат), QTextEdit для истории запросов, QListWidget для списка всех записей справочника.

Меню: «Соединение» → «Подключиться», «Отключиться»; «Записи» → «Обновить», «Добавить…».

Сервер: DNSServer. Запрос: доменное имя. Ответ: IP-адрес.


Вариант 4. Клиент погоды

GUI: QComboBox для выбора города, QLabel для отображения температуры, влажности и скорости ветра, QPushButton «Обновить», QTextEdit для истории запросов.

Меню: «Соединение» → «Подключиться», «Отключиться»; «Города» → «Обновить список».

Сервер: WeatherServer. Запрос: название города. Ответ: температура, влажность, ветер.


Вариант 5. Клиент конвертера валют

GUI: QDoubleSpinBox для ввода суммы, два QComboBox для исходной и целевой валюты, QLabel для результата конвертации, QPushButton «Конвертировать», QTextEdit для истории операций.

Меню: «Соединение» → «Подключиться», «Отключиться»; «Курс» → «Показать курс».

Сервер: CurrencyServer. Запрос: сумма, исходная валюта, целевая валюта. Ответ: сконвертированная сумма.


Вариант 6. Клиент TO-DO списка

GUI: QLineEdit для ввода задачи, QPushButton «Добавить», QListWidget для списка задач (с чекбоксами), QPushButton «Выполнить» / «Удалить».

Меню: «Соединение» → «Подключиться», «Отключиться»; «Список» → «Очистить», «Обновить».

Сервер: TodoServer. Запрос: команда (добавить/выполнить/удалить/показать), задача. Ответ: обновлённый список задач.


Вариант 7. Клиент телефонного справочника

GUI: QLineEdit для имени, QLineEdit для телефона, QPushButton «Добавить» / «Найти» / «Удалить», QListWidget для отображения всех записей справочника.

Меню: «Соединение» → «Подключиться», «Отключиться»; «Записи» → «Показать все».

Сервер: PhoneServer. Запрос: команда (добавить/найти/удалить/все), имя, телефон. Ответ: результат операции.


Вариант 8. Клиент хранилища KV (ключ—значение)

GUI: QLineEdit для ключа, QLineEdit для значения, QPushButton «Сохранить» / «Получить» / «Удалить», QListWidget для списка ключей, QLineEdit для отображения полученного значения.

Меню: «Соединение» → «Подключиться», «Отключиться»; «Данные» → «Ключи», «Очистить».

Сервер: KVServer. Запрос: команда (set/get/del/keys), ключ, значение. Ответ: значение или список ключей.


Вариант 9. Клиент генератора паролей

GUI: QSpinBox для длины пароля, QComboBox для типа символов (alpha / num / all), QPushButton «Сгенерировать», QLineEdit для результата (только чтение), QTextEdit для истории сгенерированных паролей.

Меню: «Соединение» → «Подключиться», «Отключиться»; «История» → «Очистить», «Сохранить».

Сервер: PassServer. Запрос: длина, тип. Ответ: сгенерированный пароль.


Вариант 10. Клиент конвертера систем счисления

GUI: QLineEdit для ввода числа, QPushButton «BIN» / «OCT» / «HEX», QLineEdit для результата (только чтение), QTextEdit для истории преобразований.

Меню: «Соединение» → «Подключиться», «Отключиться»; «История» → «Очистить».

Сервер: ConvServer. Запрос: число, целевая система счисления. Ответ: число в новой системе счисления.


Вариант 11. Клиент файлового менеджера (имитация)

GUI: QListWidget для списка файлов на сервере, QLineEdit для имени файла, QPushButton «Создать» / «Удалить» / «Размер», QLabel для информации о файле (имя, размер, дата).

Меню: «Соединение» → «Подключиться», «Отключиться»; «Файлы» → «Обновить».

Сервер: FileServer. Запрос: команда (создать/удалить/размер/список), имя файла. Ответ: результат операции.


Вариант 12. Клиент голосования

GUI: четыре QRadioButton для вариантов ответа, QPushButton «Голосовать», QProgressBar для отображения результатов по каждому варианту, QLabel для статуса (голос принят / уже голосовали).

Меню: «Соединение» → «Подключиться», «Отключиться»; «Результаты» → «Обновить».

Сервер: VoteServer. Запрос: номер варианта. Ответ: текущие результаты голосования.


Вариант 13. Клиент системы логирования

GUI: QComboBox для выбора уровня (INFO / WARN / ERROR), QLineEdit для ввода сообщения, QPushButton «Записать», QTextEdit для отображения содержимого журнала, QPushButton «Обновить» / «Очистить».

Меню: «Соединение» → «Подключиться», «Отключиться»; «Журнал» → «Обновить», «Очистить», «Сохранить».

Сервер: LogServer. Запрос: команда (записать/показать), уровень, сообщение. Ответ: содержимое журнала.


Вариант 14. Клиент чата (многоклиентский)

GUI: QTextEdit для истории сообщений (отправленные и полученные от других клиентов), QLineEdit для ввода сообщения, QPushButton «Отправить», QListWidget для списка подключённых пользователей, QLineEdit для ввода имени пользователя (при подключении).

Меню: «Соединение» → «Подключиться с именем…», «Отключиться»; «Журнал» → «Очистить».

Сервер: ChatServer (многоклиентский). Запрос: имя пользователя, сообщение. Ответ: рассылка сообщений всем подключённым клиентам.


Вариант 15. Клиент системного монитора

GUI: QLabel для отображения имени хоста, ОС, количества процессоров и объёма памяти, QLCDNumber для аптайма (время работы), QPushButton «Обновить» / «Ping».

Меню: «Соединение» → «Подключиться», «Отключиться»; «Обновить» → «Обновить данные».

Сервер: InfoServer. Запрос: команда (info/uptime/ping). Ответ: системная информация.


Вариант 16. Клиент генератора случайных чисел

GUI: два QSpinBox для min и max, QPushButton «Сгенерировать», QLabel для отображения результата, QTextEdit для истории сгенерированных чисел.

Меню: «Соединение» → «Подключиться», «Отключиться»; «История» → «Очистить».

Сервер: RandServer. Запрос: min, max. Ответ: случайное число.


Вариант 17. Клиент статистики текста

GUI: QTextEdit для ввода текста, QPushButton «Анализировать», QLabel для отображения количества символов, слов и строк.

Меню: «Соединение» → «Подключиться», «Отключиться».

Сервер: StatServer. Запрос: текст. Ответ: количество символов, слов, строк.


Вариант 18. Клиент трансформации текста

GUI: QLineEdit для ввода текста, QPushButton «REVERSE» / «UPPER» / «LOWER», QLineEdit для результата (только чтение), QTextEdit для истории преобразований.

Меню: «Соединение» → «Подключиться», «Отключиться»; «История» → «Очистить».

Сервер: TextServer. Запрос: команда (reverse/upper/lower), текст. Ответ: преобразованный текст.


Вариант 19. Клиент анаграмм

GUI: QLineEdit для ввода слова, QPushButton «Найти анаграммы», QListWidget для отображения найденных анаграмм.

Меню: «Соединение» → «Подключиться», «Отключиться».

Сервер: AnagramServer. Запрос: слово. Ответ: список анаграмм.


Вариант 20. Клиент сервера времени

GUI: QLCDNumber для отображения текущего времени, QPushButton «Обновить», QLabel для отображения текущей даты.

Меню: «Соединение» → «Подключиться», «Отключиться»; «Формат» → «12-часовой», «24-часовой».

Сервер: TimeServer. Запрос: команда (time/date). Ответ: текущее время или дата.


Порядок выполнения

  1. Создать проект Qt Widgets Application в Qt Creator (CMake).
  2. В конструкторе MainWindow создать все виджеты и менеджеры компоновки программно (или через Qt Designer — по выбору).
  3. Реализовать меню с помощью QMenuBar, QMenu, QAction.
  4. Реализовать подключение к серверу через диалоговое окно.
  5. Реализовать отправку и приём сообщений через QTcpSocket и сигналы/слоты.
  6. Реализовать форматирование сообщений в истории чата (цвета, временные метки).
  7. Реализовать сохранение журнала в файл.
  8. Запустить эхо-сервер из лабораторной работы №7, подключиться клиентом, протестировать обмен сообщениями.
  9. Сохранить скриншоты.

Контрольные вопросы

  1. Какие виджеты Qt использованы в программе? Каково назначение каждого?
  2. Чем отличается QLineEdit от QTextEdit? Когда следует использовать каждый из них?
  3. Какие менеджеры компоновки существуют в Qt? В чём преимущества менеджеров компоновки перед ручным позиционированием?
  4. Что такое QAction и как он связан с меню и панелью инструментов?
  5. Как работает механизм сигналов и слотов? Чем отличается clicked() от triggered()?
  6. Как сделать виджет доступным или недоступным для взаимодействия?
  7. Как вызвать стандартный диалог выбора файла (QFileDialog)?
  8. Как изменить цвет текста в QTextEdit? Какие классы используются для форматирования?
  9. Что такое QDialog и чем он отличается от QMainWindow?

Содержание отчёта

  1. Тема, цель и задание лабораторной работы.
  2. Скриншоты внешнего вида приложения (подключение, обмен сообщениями, отключение).
  3. Текст программы с комментариями.
  4. Скриншот сохранённого файла журнала.
  5. Ответы на контрольные вопросы.
Наверх
Лаб. работа “Средства языка для организации работы в сети. Основные классы и интерфейсы реализации сетевого взаимодействия”
Лаб. работа “Концепция распределённой обработки данных и технологии удалённой обработки данных”