-
目标: 做上位机软软件的时候,觉得QTabWidget的每个tab跳转时候,单纯的界面显示太过单调,希望有界面上面的控件有一个进场的动画效果。
- 效果:
-
实现 : 通过动画QPropertyAnimation把设置单个控件动画效果,在用组合动画类QSequentialAnimationGroup顺序执行。
-
void MainWindow::addAnimationWidget(QSequentialAnimationGroup *Animation,QPushButton *widget)
{
int Durtime = 200;
int startX = 600;
if(!widget->isHidden())
{
QPropertyAnimation *pScaleAnimation = new QPropertyAnimation(widget, "pos");
pScaleAnimation->setDuration(Durtime);
pScaleAnimation->setStartValue(QPoint(200, widget->y()));
pScaleAnimation->setEndValue(QPoint(widget->x(),widget->y()));
pScaleAnimation->setEasingCurve(QEasingCurve::Linear);
Animation->addAnimation(pScaleAnimation);
widget->move(startX,widget->y());
}
}
void MainWindow::on_currentChanged(int indexs)
{
if(Animation->state()==QSequentialAnimationGroup::Running){
Animation->pause();
Animation->resume();
return;
}
Animation->clear();
if(indexs ==0)
{
this->addAnimationWidget(Animation,ui->btn_1);
this->addAnimationWidget(Animation,ui->btn_2);
this->addAnimationWidget(Animation,ui->btn_3);
this->addAnimationWidget(Animation,ui->btn_4);
}
else
{
this->addAnimationWidget(Animation,ui->btn_5);
this->addAnimationWidget(Animation,ui->btn_6);
this->addAnimationWidget(Animation,ui->btn_7);
this->addAnimationWidget(Animation,ui->btn_8);
}
Animation->start();
}
-
异常: 实际的项目中,经常会把tab widget每个tab的界面单独拿出来,这个时候需要需要调用showEvent,延迟十毫秒调用添加动画的槽函数,否则当外部有数据改变界面控件的数值,点击tab跳转过来,有时候会出现动画效果没有出来的情况。
下载:源码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)