Это старая версия Информатика/10Проф/QtFractals за 02.05.2024 08:47:27.

Разработка Gui на Qt (PySide6) - Фракталы

Задание A

Видео
(https://u.pcloud.link/publink/[..]KyQzltzVwGaeTRVCxJ97 Пример на Python))
Пример на C++


Создайте приложение, которое отрисовывает кривую Коха порядка \(N\), начиная с \(N=0\). Кривая должна «смотреть вверх». Количество итераций меняется при помощи QSpinBox.


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


Кривая Коха должна отрисовываться методом paintEvent. Этот метод должен вызывать рекурсивную функцию, рисующую кривую Коха по заданному числу итераций и концам кривой. Концы кривой должны быть действительными числами, так отрисовка будет лучше. Также в эту функцию нужно передавать QPainter.


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

Задание B

Пример "ручной" компоновки обработкой resizeEvent на Python – не для использования, только для знакомства
Пример использования менеджеров компоновки на Python
Пример "ручной" компоновки обработкой resizeEvent на C++ – не для использования, только для знакомства
Пример использования менеджеров компоновки на C++
Документация на QBoxLayout – базовый класс для QHBoxLayout и QVBoxLayout


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


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


Изменение размеров кривой Коха должно быть "гладким", то есть при изменениях размера окна не должно быть "прыжков" кривой.