J'utilise des objets QGraphics pour afficher des boîtes avec des flèches entre eux. Je veux une animation sur ces flèches/lignes qui commence à une extrémité et va à l'autre.Animation avec QTimeline
L'animation fonctionne très bien lorsque les emplacements de début et de fin de la flèche ne changent pas pendant l'exécution de QTimeLine, c'est-à-dire que je laisse la vue statique. Mais puisque l'utilisateur peut faire glisser les cases (et donc redessiner les flèches), j'ai besoin de réinitialiser la position de début et de fin à l'intérieur de QGraphicsItemAnimation pour que l'animation corresponde à la nouvelle ligne de flèche.
J'ai essayé de mettre à jour les emplacements de début et de fin dans la méthode de peinture de l'objet Flèche, mais cela rend l'animation folle (elle retourne de façon aléatoire partout). Je suppose que c'est parce que j'ai changé les positions de l'animation lorsque l'objet QTimeLine était à l'état 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);
}
}
Comment dois-je changer dynamiquement le début de QGraphicsItemAnimation et des positions extrêmes (0 et 1)?
Pour le produit final, je souhaite que l'utilisateur puisse faire glisser les boîtes, que les flèches suivent (ce qui fonctionne actuellement) et que l'animation continue le long de la nouvelle trajectoire de la flèche.
Si ce n'est pas possible, alors j'ai besoin de trouver un moyen de capturer le glisser et arrêter l'animation de la flèche jusqu'à ce que l'utilisateur libère et puis je suppose que le réinitialiser ...?