QWidget 实现按钮按下释放伸缩效果

今日在查看QML相关文章时,发现有个控件的scale缩放属性,思考着在QWiget中是否也有类似的api直接调用,发现好像是没有的。因此做个简单的QWidget版的实现demo。

效果:

QWidget 实现按钮按下释放伸缩效果_第1张图片

 实现思路:监听按钮的按下事件和按钮的释放事件,来对按钮的QRect进行手动设置,并结合动画来实现过渡效果。

所用动画库:

关键代码:

// 注意:需要预先设置好按钮的位置,否则会出现宽度变化的奇怪现象
btn->setGeometry(100, 100, 40,40);
pAnimation = new QPropertyAnimation(btn, "geometry");
pAnimation->setDuration(100);
int pos = 5;
int size = 10;
QRect originR = btn->geometry();

connect(btn,&QPushButton::clicked, this, &Widget::btnhandle);
connect(btn, &QPushButton::pressed, [=](){
    pAnimation->setStartValue(originR);
    pAnimation->setEndValue(QRect(btn->x()-pos, btn->y()-pos, btn->width()+size, btn->height()+size));
    pAnimation->start();
});
connect(btn, &QPushButton::released, [=](){
    // 按钮在释放之前,QRect已经被pressed进行更改了,所以此处的动画起始值要变为当前实时的按钮QRect
    pAnimation->setStartValue(btn->geometry());
    pAnimation->setEndValue(originR);
    pAnimation->start();
});

你可能感兴趣的:(QT,动画,qt)