- 目标: 做上位机软软件的时候,觉得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跳转过来,有时候会出现动画效果没有出来的情况。
下载:源码