Qt 图元(QGraphicsItem)动画效果


1. Qt动画效果的幕后英雄:QTimeLine_cuteqt的博客-CSDN博客

2. QT 状态机详解 statemachine (转) - 走看看 (zoukankan.com)

3. Qt 之 QPropertyAnimation_水军总督的博客-CSDN博客_qpropertyanimation

==》实操:

 1 void MainWindow::sl_addAnimationAct()
 2 {
 3     //connect(timeline,SIGNAL(frameChanged(int)),yourobj,SLOT(yourobjslot(int))); // 每次变帧都会发送信号
 4     //setUpdateInterval(int interval)   // 该函数用于控制更新动画的时间间隔
 5 
 6     StarItem *star = new StarItem; // 自定义的继承自 QGraphicsItem 的图元
 7     star->setPos(-200, 0); //【起点】
 8 
 9     QTimeLine *timeLine = new QTimeLine(4000);    // 动画持续时间 Tad 。
10     //timeLine->setCurveShape(QTimeLine::SineCurve); // Tad 内, 以正弦速移帧, 即先正向变速移动, 再反向变速移动
11     timeLine->setCurveShape(QTimeLine::LinearCurve); // Tad 内, 以线速移帧, 即平稳向前移动到终点
12     timeLine->setLoopCount(0);    // 循环次数, 0 为无限循环
13     timeLine->setFrameRange(0, 100); // 帧范围
14 
15     QGraphicsItemAnimation *anima = new QGraphicsItemAnimation;
16     anima->setItem(star);
17     anima->setTimeLine(timeLine);
18     //================↓
19 #if 0
20     int y =(qrand()%400)-200;
21     for(int i=0;i<400;i++)
22     {
23         //anima->setPosAt(i/400.0,QPointF(i-200,y));
24         anima->setPosAt(1,QPointF(i-200,y));
25     }
26 #endif
27     anima->setPosAt(0.9, QPointF(200, 0)); //【终点】, 0.9 为驻留比例, 即运动时间 = Tad * 0.9, 到达终点时驻留时间 = Tad * (1 - 0.9)
28     //================↑
29     timeLine->start();
30 
31     scene->addItem(star);
32 }

相关