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

本文介绍如何使用QPropertyAnimation和QSequentialAnimationGroup为Qt的QTabWidget添加控件动画,提升界面切换体验。通过具体代码示例,展示如何根据不同tab页面加载相应的动画效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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跳转过来,有时候会出现动画效果没有出来的情况。

下载:源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波塞冬~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值