QT动画时间轴控制 QTimeLine

QTimeLine类提供用于控制动画的时间轴

比如控制进度条的增长,图片,窗口的旋转,平移等等

QTimeLine有一个frameChanged(int)信号

当调用QTimeLine::start()

frameChanged(int val)里面的val值会从0到50开始递增

(前提是需要设置范围如timeLine->setFrameRange(0, 50); 也需要设置QTimeLine变化的时间timeLine = new QTimeLine(1000, this)

可以在槽函数中接受这个val值

一般使用如:

transform.translate(a, b);

transform.rotate(c);

transform.scale(d, e);

以上(a,b,c,d,e)都可以通过val的值代替或者和val做某种运算后得到

 

QTransform  QTransform类指定坐标系统的2D转换

其中  translate() rotate() 俩函数组合实现图片旋转 , translate()设置旋转中心 , rotate() 实现旋转)

translate(设置坐标中心), scale(设置缩放比例), shear(设置b变形比例), rotate (设置旋转角度)

 

 

 

 

例子: 当点击按钮时进度条的值会从0100使用时间是1

QProgressBar *progressBar = new QProgressBar (this);

progressBar->setRange(0, 100);

 

  // 指定变化目标是谁以及变化的时间

  QTimeLine *timeLine = new QTimeLine(1000, this);//设置变化时间是1秒

  //指定在1秒内变化的范围 如果是(0,50)则1秒内进度条从0增加到50

  //timeLine->setFrameRange(0, 50);

 

  //设置动画的次数

  timeLine->setLoopCount(3);//进度条加载3次

  //设置动画的时间快慢,范围以某种速度增长(先快后慢/或者先慢后快)

  timeLine->setCurveShape(QTimeLine::EaseInCurve);

  //设置动画的方向(如进度条是从0增到100还是100降到0)

  timeLine->setDirection(QTimeLine::Backward);

  //绑定信号来改变进度条的值

  connect(timeLine, SIGNAL(frameChanged(int)), progressBar, SLOT(setValue(int)));

  //此按钮用来调用QTimeLine::start()函数

 

 //需要指定开始,一般触发式,或者使用定时器

 QPushButton *pushButton = new QPushButton(tr("Start animation"), this);

  connect(pushButton, SIGNAL(clicked()), timeLine, SLOT(start()));

 

 //这个可以切换时间轴的方向,也就是动画运动的方向

 timeLine-> toggleDirection();

posted @ 2019-08-11 22:04  长脚的思想  阅读(3086)  评论(0编辑  收藏  举报