Анимация на объекте QPainterPath

Я хотел бы отобразить анимированную кнопку формы стрелки.

Чтобы нарисовать его, я создал класс, который наследует QGraphicsObjectи использовать QPainterPath учебный класс.

Я рисую это в QGraphicsScene и оживить его с помощью свойства geometryпереопределено в классе MyArrow.

Вы можете найти весь код здесь: https://github.com/TaiZzZ/arrowAnimation

Моя проблема заключается в следующем:

Стрелка оживляет (это означает, что она движется вправо и возвращается), но остается окрашенной во время движения. У тебя есть идеи почему?

PS: у меня такое же поведение, используя QState Machine, поэтому я предполагаю, что проблема заключается только в том, как я рисую свои стрелки.

Я пробовал две разные вещи:

  • Изменение кривой Безье в линию не решает проблему.

  • Вместо того, чтобы рисовать путь, я нарисовал прямоугольник ( boundingRect()) (Так я только поменял drawPath(path)), и это работает

Итак, в заключение, ошибка исходит от QPainterPath … но почему ?

РЕДАКТИРОВАТЬ :

Вот фотографии, чтобы проиллюстрировать мою проблему:

До анимации
После анимации

Обратите внимание, что это больше не сглаживает …

0

Решение

Проблема на самом деле довольно проста — вы не очищаете QPainterPath перед повторным использованием.

Ваш Arrow класс имеет член …

QPainterPath arrow;

и ваш Arrow::paint реализация начинается с …

arrow.moveTo(rect.right(),rect.center().y());
arrow.lineTo(rect.left(),rect.top());

Итак, каждый раз Arrow::paint называется это добавление другой новый подпуть к QPainterPath, Следовательно, в любой момент времени вы видите накопленные пути. Самое простое решение было бы удалить arrow переменная-член и использовать локально QPainterPath

QPainterPath arrow;
arrow.moveTo(rect.right(),rect.center().y());
arrow.lineTo(rect.left(),rect.top());
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]