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

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

效果:

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

所用动画库:<QPropertyAnimation>

关键代码:

// 注意:需要预先设置好按钮的位置,否则会出现宽度变化的奇怪现象
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();
});

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值