Search code examples
qtanimationgraphicsqgraphicsview

QGraphicsItem moving along path


Is it possible to animate a QGraphicsItem in such a way that it would move along some path within QGraphicsScene / QGraphicsView?

Something like this demo, where white point moves along gear - a closed curve.

If so, then how could it be done?


Solution

  • Found a solution here:

    QGraphicsItem *ball = new QGraphicsEllipseItem(0, 0, 20, 20);
    
    QTimeLine *timer = new QTimeLine(5000);
    timer->setFrameRange(0, 100);
    
    QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
    animation->setItem(ball);
    animation->setTimeLine(timer);
    
    animation->setPosAt(0.f / 200.f, QPointF(0, 0));
    animation->setPosAt(10.f / 200.f, QPointF(0, 30));
    animation->setPosAt(20.f / 200.f, QPointF(20, 30));
    animation->setPosAt(30.f / 200.f, QPointF(20, 20));
    animation->setPosAt(40.f / 200.f, QPointF(30, 20));
    animation->setPosAt(50.f / 200.f, QPointF(30, 30));
    animation->setPosAt(60.f / 200.f, QPointF(40, 30));
    animation->setPosAt(70.f / 200.f, QPointF(40, 60));
    animation->setPosAt(80.f / 200.f, QPointF(50, 60));
    animation->setPosAt(90.f / 200.f, QPointF(50, 0));
    animation->setPosAt(100.f / 200.f, QPointF(70, 0));
    animation->setPosAt(110.f / 200.f, QPointF(70, 10));
    animation->setPosAt(120.f / 200.f, QPointF(80, 10));
    
    QGraphicsScene *scene = new QGraphicsScene();
    scene->setSceneRect(0, 0, 250, 250);
    scene->addItem(ball);
    
    ui->graphicsView->setScene(scene);
    
    timer->start();