Qt4.8文档翻译:QTimeLine类参考,QTimeLine Class Reference
QTimeLine类提供一个时间线,用来控制动画。
它通常被用来以定期调用一个信号槽的方式来给一个图形界面控件增加动画效果。妳可以将以毫秒为单位的动画持续时间传递到QTimeLine 的构造函数中,以便构造一个时间线。时间线的持续时间指的是这个动画要运行多久。然后妳通过调用setFrameRange()来设置一个适当的帧号范围。最后,将frameChanged()信号连接到妳想要对其作动画的部件的一个适当信号槽上(例如:QProgressBar的setValue())。当妳调用start()时,QTimeLine就会进入运行(Running)状态,然后就开始定期发射frameChanged()信号,以引起妳的部件的对应属性的值以一个固定的速度从帧号范围的最低值增长到最高值。妳可以通过调用setUpdateInterval()来指定更新时间间隔。运行完毕之后,QTimeLine进入未运行(NotRunning)状态,并且发射finished()信号。
示例:
...
progressBar = new QProgressBar(this);
progressBar->setRange(0, 100);
//构造一个时间线,持续1秒,帧号范围0 - 100
QTimeLine *timeLine = new QTimeLine(1000, this);
timeLine->setFrameRange(0, 100);
connect(timeLine, SIGNAL(frameChanged(int)), progressBar, SLOT(setValue(int)));
//单击按钮时,会启动进度条的动画
pushButton = new QPushButton(tr("Start animation"), this);
connect(pushButton, SIGNAL(clicked()), timeLine, SLOT(start()));
...
妳还可以把QTimeLine 用到图形视图框架中来做动画。QGraphicsItemAnimation类实现的就是带有时间线的QGraphicsItems的动画。
默认情况下,时间线只运行一遍,从开始值一直到结束值。这样的话,妳需要再次调用start()才能重新开始动画。要让时间线循环运行的话,妳可以调用setLoopCount(),在其中传递循环的次数。还可以调用setDirection()来改变动画的方向,这将导致时间线反方向运行。妳还可以通过调用setPaused()来在时间线运行的时候将它暂停或继续。对于交互式的控制,可以使用setCurrentTime()函数,它会直接设置时间线的当前时间位置。尽管它多数是在未运行(NotRunning)状态有用(例如,连接到一个QSlider的valueChanged()信号),但这个函数是可以随时调用的。
帧号接口对于标准的部件狠有用,但是QTimeLine 可以用来控制任何类型的动画。QTimeLine 的核心功能位于valueForTime()函数中,它会针对一个指定的时间生成一个位于0和1之间的值。这个值通常用来描述一个动画的步骤,0指第一步,1指最后一步。在运行的时候,QTimeLine通过调用valueForTime()来生成0到1之间的值,并且发射valueChanged()信号。默认情况下,valueForTime()使用一个插值算法来生成这些值。妳可以通过调用setCurveShape()来从一组预定义的时间线算法中选择一个。
注意,默认情况下,QTimeLine使用的是EaseInOut 这个曲线形状,它提供了一个刚开始增长狠慢、然后稳定增长、最后又增长狠慢的值。对于自定义的时间线,妳可以重载valueForTime()函数,那种情况下会忽略QTimeLine 的curveShape属性。
参考QProgressBar、QProgressDialog和QGraphicsItemAnimation。
(☯:注意它跟QAbstractAnimation里的loopCount属性的区别,这里是0表示无限循环,那里是-1表示无限循环)
这个属性表示的是时间线的循环次数。
循环次数为0就表示这个时间线会永远循环。
默认值是1.
访问函数:
int |
loopCount () const |
void |
setLoopCount ( int count ) |
HxLauncher: Launch Android applications by voice commands