【Qt】实现按钮透明的动画效果

7 篇文章 2 订阅

qt里实现动画一般是用QPropertyAnimation,也支持有透明的动画效果,即属性为opacity。该属性是QWindow类及其派生类才有的,QWidget没有,QWidget及其派生类就用不了,故只能使用其他方法来实现了

我们这里通过QGraphicsOpacityEffect来设置透明度,使用定时器来控制。

效果如下图:

下面上代码

头文件:

#ifndef RECORDBTN_H
#define RECORDBTN_H

#include <QPushButton>

class QGraphicsOpacityEffect;
class QTimer;

class RecordBtn : public QPushButton
{
    Q_OBJECT
public:
    explicit RecordBtn(QWidget *parent = 0);

    void startAnimation();
    void stopAnimation();
    bool isActive() const;

signals:
    void sigTimeout();

private:
    QGraphicsOpacityEffect *m_pOpacityEffect = Q_NULLPTR;
    QTimer *m_pTimer = Q_NULLPTR;
    bool m_bStatus = false;
    float m_opacityVal = 1.0;
};

#endif // RECORDBTN_H

cpp文件:

#include "recordbtn.h"

#include <QGraphicsOpacityEffect>
#include <QTimer>

RecordBtn::RecordBtn(QWidget *parent):
    QPushButton(parent)
{
    m_pOpacityEffect = new QGraphicsOpacityEffect(this);
    this->setGraphicsEffect(m_pOpacityEffect);

    m_pTimer = new QTimer(this);
    //设置QTimer的高精度
    m_pTimer->setTimerType(Qt::PreciseTimer);
    connect(m_pTimer, &QTimer::timeout, this, [=](){
        emit sigTimeout();
        m_pOpacityEffect->setOpacity(m_opacityVal);

        if(m_bStatus)
        {
            m_opacityVal -= 0.1;
        }
        else
        {
            m_opacityVal += 0.1;
        }

        if(m_opacityVal > 0.9)
        {
            m_bStatus = true;
        }
        else if(m_opacityVal < 0.1)
        {
            m_bStatus = false;
        }
    });
}

void RecordBtn::startAnimation()
{
    m_pTimer->start(50);
}

void RecordBtn::stopAnimation()
{
    m_pTimer->stop();
    m_pOpacityEffect->setOpacity(1.0);
}

bool RecordBtn::isActive() const
{
    return m_pTimer->isActive();
}

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值