Я хотел бы отобразить анимированную кнопку формы стрелки.
Чтобы нарисовать его, я создал класс, который наследует QGraphicsObject
и использовать QPainterPath
учебный класс.
Я рисую это в QGraphicsScene
и оживить его с помощью свойства geometry
переопределено в классе MyArrow.
Вы можете найти весь код здесь: https://github.com/TaiZzZ/arrowAnimation
Моя проблема заключается в следующем:
Стрелка оживляет (это означает, что она движется вправо и возвращается), но остается окрашенной во время движения. У тебя есть идеи почему?
PS: у меня такое же поведение, используя QState Machine, поэтому я предполагаю, что проблема заключается только в том, как я рисую свои стрелки.
Я пробовал две разные вещи:
Изменение кривой Безье в линию не решает проблему.
Вместо того, чтобы рисовать путь, я нарисовал прямоугольник ( boundingRect()
) (Так я только поменял drawPath(path)
), и это работает
Итак, в заключение, ошибка исходит от QPainterPath … но почему ?
РЕДАКТИРОВАТЬ :
Вот фотографии, чтобы проиллюстрировать мою проблему:
Обратите внимание, что это больше не сглаживает …
Проблема на самом деле довольно проста — вы не очищаете 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());
Других решений пока нет …