Я использую объекты QGraphics для отображения полей со стрелками между ними. Я хочу анимацию на этих стрелках / линиях, которая начинается с одного конца и идет к другому.
Анимация прекрасно работает, когда начальное и конечное положения стрелки не меняются во время выполнения QTimeLine, т.е. я оставляю представление статичным.
Но так как пользователь может перетаскивать прямоугольники (и, таким образом, я перерисовываю стрелки, чтобы следовать за ними), мне нужно сбросить начальную и конечную позиции внутри QGraphicsItemAnimation, чтобы анимация соответствовала новой линии стрелки.
Я попытался обновить начальную и конечную точки в методе рисования объекта Arrow, но это просто сводит анимацию с ума (она случайным образом переворачивается повсюду). Я предполагаю, что это потому, что я изменил позиции анимации, когда объект QTimeLine находился в состоянии RUNNING.
void Arrow::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
...
///update the arrow to have a new source and destination, draw arrow, etc
...
if (mAnimate)
{
mAnimationObj->setPosAt(0, mSourcePoint);
mAnimationObj->setPosAt(1, mDestPoint);
}
}
Как мне динамически изменить начальную и конечную позиции QGraphicsItemAnimation (0 и 1)?
Для конечного продукта я хочу, чтобы пользователь мог перетаскивать прямоугольники вокруг, следить за стрелками (что в настоящее время работает), а также продолжать анимацию вдоль нового маршрута со стрелкой.
Если это невозможно, тогда мне нужно найти способ захватить перетаскивание и остановить анимацию стрелки, пока пользователь не отпустит, а затем, я думаю, сбросить его ...?