Задания по разработке на Qt для 11Д выпуска 2019

0: Скриншот установленной среды QT Creator

Установить дома Qt, QtCreator, сделать скриншот запущенной среды QtCreator и запущенного приложения, использующего библиотеку Qt. Скриншот сохранить в формате JPEG и сдать в тестирующую систему.

1: Связь разных виджетов между собой

Пример проекта с урока: sample2.zip

Добавить в приложение три кнопки: увеличение значения на 1, уменьшения на 1 и сброса значения. Нажатие на эти кнопки должно приводить к изменению значения в классе MyCounter и всех элементах управления на экране (LineEdit, SpinBox, Slider).

Требования к проектам, сдаваемых в систему:

  1. Проект должен быть сжат при помощи архиватора zip.
  2. Необходимо архивировать каталог с проектом, а не только файлы внутри него.

2: Быки и коровы: проверка введённого числа

Реализация игры Быки и коровы.

Функциональность приложения. После запуска программы компьютер генерирует случайное 4-значное число (все цифры различны, начинается не с нуля). Число выводится на стандартный вывод. Главное окно приложения содержит поле ввода (QLineEdit) для ввода задуманного числа, кнопку ”Проверить“ (QPushButton) и строчку для вывода сообщения (QLabel). При нажатии на кнопку производится проверка введенного числа, и либо выводится сообщение о том, что число некорректно, либо выводится количество быков и коров для введенного числа. Сообщения выводятся путем изменения текста у объекта QLabel.

3: Быки и коровы: подсчёт количества ходов

В окне приложения должно быть две кнопки «Угадать» и «Сдаться». Также ведется подсчет числа попыток, за которое угадано число. Не учитываются в качестве попытки: ввод некорректного числа, ввод числа, совпадающего с тем числом, которое было введено последним перед этим.

При нажатии на кнопку «Сдаться» выводится задуманное число и игра начинается заново.

При нажатии на кнопку «Угадать» идет проверка числа и выводится сообщение о результате проверки. Если в результате проверки было угадано задуманное число, то выводится сообщение об этом, выводится число ходов и на кнопке «Сдаться» текст меняется на «Новая игра», а нажатия на кнопку «Угадать» игнорируются (можно сделать кнопку неактивной). После нажатия на кнопку «Новая игра» задумывается новое число, текст кнопки меняется на «Сдаться» и всё начинается заново.

4: Быки и коровы: таблица результатов

Функциональность приложения. Хранение таблицы результатов лучших игроков (угадавших за минимальное число ходов). Должно храниться пять лучших результатов. При удачном окончании игры (если игрок будет добавлен в таблицу результатаов), приложение запрашивает имя игрока (это удобно делать при помощи QInputDialog), сохраняет его в файле с лучшими результатами. Должна быть возможность просмотра лучших результатов (можно при помощи QMessageBox). Выдача лучших результатов – в порядке неубывания числа ходов, использованных при отгадывании.

Игрок добавляется в таблицу результатов всегда, если размер таблицы результатов меньше максимального. Если размер таблицы уже достиг максимального, то новый игрок добавляется в таблицу результатов, только если его результат строго лучше результата участника, занимающего последнее место.

Программа должна корректно работать как при наличии, так и при остутствии таблицы результатов.

Как проверить корректность открытия файла?

ifstream fin("input.txt");
if (fin) {}

Также можно использовать механизм обработки исключений.

5: Быки и коровы: угадывание задуманного числа

Необходимо реализовать режим игры, в котором компьютер угадывает число, задуманное человеком.

После старта программы игрок может выбрать режим игры. В режиме, когда программа угадывает число, программа задаёт вопросы относительно задуманного число и просит человек ввести ответ.

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

6: Кривая Коха

Пример с урока: sample3.zip.

Создайте окно приложения и нарисуйте внутри виджета кривую Коха порядка N. Значение числа итераций должно определяться константой в одном месте кода. Например:

const int N = 5;

Кривая должна размещаться в центре окна и целиком помещаться в окне. Кривая должна «смотреть вверх».

7: Изменение числа итераций кривой Коха

Кривая Коха должна отрисовываться методом paintEvent. Размер кривой Коха определяется размерами виджета.

Количество итераций кривой определяется private-членом класса виджета. Виджет имеет слот, обновляющий значение числа итераций. Этот слот должен изменить значения члена класса, хранящего число итераций и вызвать для виджета метод repaint() для обновления содержимого.

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

8: Изменение размеров виджета

Пример с урока: sample4.zip.

Окно приложения должно содержать SpinBox, управляющий количеством итераций кривой Коха. Размеры кривой Коха должны меняться при изменении размеров окна. Сама кривая Коха должна быть максимального размера, допустимого для данного размера окна, и располагаться в центре окна.

Для изменения размеров виджета используется менеджер компоновки, метод paintEvent виджета должен определять собственные размеры при помощи вызова методов width() и height() и использовать данные размеры для рисования фрактала.

9: Три разных фрактала

Реализовать приложение, рисующее минимум три из перечисленных фракталов. Функционал приложения:

  1. выбор типа фрактала при помощи элемента управления типа меню, QRadioButton или QComboBox.
  2. выбор глубины рекурсии фрактала при помощи элемента управления
  3. автоматическое масштабирование фрактала при изменении размеров окна приложения.

10: Обработка событий мыши

Пример с урока: sample5.zip.

Функционал приложения: наличие не менее трех фракталов, масштабирование фрактала при помощи колеса мыши, перемещение фрактала внутри окна при помощи мыши, изменение фрактала при изменении размеров окна.

Требования к масштабированию фрактала.

  1. Все три операции (перемещение фрактала мышью, изменение масштаба про помощи колеса, изменение размеров окна должны происходить “гладко”, то есть не должно быть резких скачков изображения при последовательных применений разных операций).
  2. Масштаб изображения меняется только при движении колесом мышью. При изменении размеров окна масштаб фрактала не меняется.
  3. При движении колеса мыши масштаб меняется таким образом, что точка, расположенная в центре окна, остается неподвижной (вариант, который тоже принимается, но более сложный в реализации: неподвижной остается точка, на которую указывает мышь).
  4. При изменении размеров окна масштаб не меняется, а изображение перемещается таким образом, чтобы точка, которая была в центре окна, продолжала оставаться в центре окна.