头像框阴影动态效果图:
实现代码:
首先自定义控件属性
Q_PROPERTY(int iBorderRadius READ getBorderRadius WRITE setBorderRadius)
创建动画类和阴影效果类
QPropertyAnimation m_ImageAnimation; //阴影动效化对象(动画类)
QGraphicsDropShadowEffect m_ImageShadowEffect; //设置阴影对象
自定义属性get函数与set函数
边框阴影动画波动效果实现函数
int getBorderRadius() const;
void setBorderRadius(const int radius);
int TestUI::getBorderRadius() const
{
return m_borderRadius;
}
void TestUI::setBorderRadius(const int radius)
{
m_borderRadius = radius;
m_ImageShadowEffect.setBlurRadius(m_borderRadius);
}
最后通过QPropertyAnimation和QGraphicsDropShadowEffect 实现阴影动画效果
设置边框阴影
m_ImageShadowEffect.setColor(QColor(0, 0, 139));
m_ImageShadowEffect.setOffset(0, 0);
m_ImageShadowEffect.setBlurRadius(0);
ui.label->setGraphicsEffect(&m_ImageShadowEffect);
边框阴影动画实现
m_ImageAnimation.setTargetObject(this);
m_ImageAnimation.setDuration(2000);
m_ImageAnimation.setPropertyName("iBorderRadius");
m_ImageAnimation.setKeyValueAt(0, 1);
m_ImageAnimation.setKeyValueAt(0.5, 40);
m_ImageAnimation.setKeyValueAt(1, 1);
m_ImageAnimation.setLoopCount(-1);
m_ImageAnimation.start();