Это старая версия Информатика/Архив/2024/10Проф/QtFractals за 02.05.2024 06:12:41.

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

Задание A

Видео
Пример на Python
Пример на C++


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


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


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


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

Задание B

Документация на QBoxLayout – базовый класс для QHBoxLayout и QVBoxLayout
Документация на setSizePolicy – метод QWidget


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


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


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