2012-02-06 166 views
3

是否有可能使QGraphicsItem动起来,使其沿着QGraphicsScene/QGraphicsView内的某条路径移动?QGraphicsItem沿着路径移动

类似this demo,其中白色点沿着齿轮移动 - 一条闭合曲线。

如果是这样,那怎么办?

回答

2

实测值的溶液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();