通过QEasingCurve来方便实现物理相似动作。
代码如下:
void MainWindow::keyPressEvent(QKeyEvent *event)
{
if(event->key() == Qt::Key_M)
{
QPropertyAnimation *animation = new QPropertyAnimation(ui->lineEdit, "geometry");
animation->setDuration(10000); //动作时间
animation->setStartValue(ui->lineEdit->geometry()); //开始动作值
animation->setEndValue(QRect(200, 200, 100, 50)); //结束动作值
QEasingCurve curve; //动作曲线
curve.setType(QEasingCurve::OutBounce); //动作曲线方式
curve.setAmplitude(3.00); //回弹Bounce振幅
curve.setOvershoot(2.70); //超调量,就是稳定量
curve.setPeriod(4.90); //频率当量
animation->setEasingCurve(curve);
animation->setLoopCount(2); //动作次数,如果为-1表示一直循环
animation->start(); //开始动作
//this->close();
}
qDebug() << event->text() << "has been pressed";
}
其中
Amplitude: The higher the amplitude, the higher the bounce or elastic spring effect that will be applied to the animation.
Overshoot: Some curve functions will produce an overshoot (exceeding its final value) curve due to a damping effect.
By adjusting the overshoot value, we are able to increase or decrease this effect.
Period: Setting a small period value will give a high frequency to the curve. A large period will give it a small frequency.
运行代码,效果如下:
多谢,亲爱的美美。