赞
踩
需要自定义一个按钮类,然后重写这个类的构造函数并且传入需要作为按钮的图片路径作为第一个参数,第二个参数是按下后的状态图片,默认为空,首先将路径传入给pix,再判断路径是否为空,若不为空就设置图片的大小,然后设置图片样式,这样可以只留下图片本身,然后将图片传入,并设置大小
- MyPushButton::MyPushButton(QString normalImg,QString pressImg)
- {
- this->normalImgPath = normalImg;
- this->pressImgPath = pressImg;
-
- //QPixmap加载图标
- QPixmap pix;
- bool ret = pix.load(normalImgPath);
- if(!ret)
- {
- QString str = QString("图片加载失败 %1").arg(normalImg);
- qDebug()<<str;
- return;
- }
-
- //设置大小
- this->setFixedSize(pix.width(),pix.height());
-
- //设置不规则图片样式
- this->setStyleSheet("QPushButton{border:0}");
-
- //设置图标
- this->setIcon(pix);
-
- //设置图标大小
- this->setIconSize(QSize(pix.width(),pix.height()));
- }
然后是对于这个图片的操作,然其有点击的特效,通过让它点击后下移然后上移即可。
对于向下移动需要创建QPropertyAnimation这个类,然后调用其中的setDuration函数实现动画时间间隔,通过setStartValue和setEndValue来设置起始位置和结束位置,起始位置的宽就是窗口宽度的一半减去按钮宽度的一半,长度稍微随意即可。为了使得弹起效果不会太生硬,选用其中的setEasingCurve函数来进行美化。代码如下
- //向下弹起
- void MyPushButton::zoom1()
- {
- QPropertyAnimation *animation = new QPropertyAnimation(this,"geometry");
-
- //设置动画时间间隔
- animation->setDuration(200);
-
- //设置起始位置
- animation->setStartValue(QRect(this->x(),this->y(),this->width(),this->height()));
-
- //设置结束位置
- animation->setEndValue(QRect(this->x(),this->y()+10,this->width(),this->height()));
-
- //设置弹起效果
- animation->setEasingCurve(QEasingCurve::OutBounce);
-
- //让动画执行
- animation->start(QAbstractAnimation::DeleteWhenStopped);
- }
向上弹起与向下弹起类似,区别就在于起始位置和结束位置,向上弹起的起始位置就是向下弹起的结束位置,向上弹起的结束位置就是向下弹起的初始位置。
- //向上弹起
- void MyPushButton::zoom2()
- {
- QPropertyAnimation *animation = new QPropertyAnimation(this,"geometry");
-
- //设置动画时间间隔
- animation->setDuration(200);
-
- //设置起始位置
- animation->setStartValue(QRect(this->x(),this->y()+10,this->width(),this->height()));
-
- //设置结束位置
- animation->setEndValue(QRect(this->x(),this->y(),this->width(),this->height()));
-
- //设置弹起效果
- animation->setEasingCurve(QEasingCurve::OutBounce);
-
- //让动画执行
- animation->start(QAbstractAnimation::DeleteWhenStopped);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。