【Qt】实现按钮透明的动画效果
2023-09-14 09:07:00 时间
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();
}
相关文章
- Qt-Qt在使用QSqlQuery时提示 QSqlError("", "Unable to fetch row", "No query")?
- Qt-Qt通过QDesktopServices操作外部资源
- Configuration Options for Qt
- Qt音视频开发35-左右通道音量计算和音量不同范围值的转换
- Qt编写可拖动对象+背景地图+多种样式+多种状态(开源)
- Qt编写安防视频监控系统67-跨平台及国产系统
- Qt之动画效果
- Qt之动画框架
- Qt学习之路之QMovie动画
- C++Qt开发——Linguist语言家
- C++Qt开发——动画框架、状态机框架
- Qt动画框架
- QT串口通信
- Qt 自定义动画按钮(超酷炫)
- qt临时存储库
- Qt QWidget标题栏双击事件
- QT图片旋转动画
- Qt动画使用总结
- 嵌入式Qt开发中,交叉编译报错::-1: error: arm-linux-g++: Command not found
- Qt 自定义事件的实现