qt 动画(界面跳转进场动画)

  1.  目标:     做上位机软软件的时候,觉得QTabWidget的每个tab跳转时候,单纯的界面显示太过单调,希望有界面上面的控件有一个进场的动画效果。
  2. 效果:    
  3. 实现  : 通过动画QPropertyAnimation把设置单个控件动画效果,在用组合动画类QSequentialAnimationGroup顺序执行。            
  4. 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();
    }
  5. 异常: 实际的项目中,经常会把tab widget每个tab的界面单独拿出来,这个时候需要需要调用showEvent,延迟十毫秒调用添加动画的槽函数,否则当外部有数据改变界面控件的数值,点击tab跳转过来,有时候会出现动画效果没有出来的情况。

下载:源码

猜你喜欢

转载自blog.csdn.net/u014491932/article/details/106252090