#include
#include
Q_OBJECT
//自定义属性 对应的参数作用为
// 类型 属性名 获取值的函数 设置属函数(其中READ、WRITE为其格式)
Q_PROPERTY(int opacity READ opacity WRITE setOpacity)
public:
int opacity() const; //获取值
void setOpacity(int opacity); //设置值
void start_animation();/启动动画函数
void lineEdit_state_set(QLineEdit* ld);//切换lineEdit框对象函数
void lineEdit_state_stop(); //停止动画效果
QLineEdit *pre_ld; //设置为全局,存储对象用于下次还原对象样式
private:
QPropertyAnimation *m_animation; //动画对象指针
int m_opacity;
//构造时需要
//创建动画对象空间(初始化可以指定动画控件和动画需使用的动画属性名)
m_animation = new QPropertyAnimation();
m_animation->setTargetObject(this); //设置使用动画的控件
//统一的效果可以在对象创建的位置设置(如动画属性名、动画时间、动画使用对象等)
// 不同的设置在使用位置单独设置即可
int parameter::opacity() const
{
return m_opacity;
}
void parameter::setOpacity(int opacity)
{
//使用传入的值通过QSS设置透明度
QString qss = “border: 5px solid rgba(13,4,137, %1)”;
pre_ld->setStyleSheet(qss.arg(opacity));
}
void parameter::start_animation(){
//opacity:不透明度
m_animation->setPropertyName(“opacity”); //指定动画属性名为自定义的属性
m_animation->setDuration(1000); //设置动画时间(单位:毫秒)
//设置动画步长值,以及在该位置时显示的透明度
m_animation->setKeyValueAt(0, 255);
m_animation->setKeyValueAt(0.5, 0);
m_animation->setKeyValueAt(1, 255);
m_animation->setLoopCount(-1); //当值为-1时,动画一直运行,直到窗口关闭
m_animation->start(); //启动动画
}
void parameter::lineEdit_state_set(QLineEdit* ld)
{
m_animation->stop(); //停止动画
if(ld){
if(pre_ld!=nullptr){
/还原之前的状态/
pre_ld->setStyleSheet (“”);
pre_ld->setStyleSheet (“border: 3px solid #939393;”);
}
pre_ld = ld;
}
Q_PROPERTY(int opacity READ opacity WRITE setOpacity)
start_animation();
}