日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Qt文档阅读笔记-easingCurve:QEasingCurve官方解析及实例

發(fā)布時(shí)間:2025/3/15 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt文档阅读笔记-easingCurve:QEasingCurve官方解析及实例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

官方解析

博主例子


官方解析

easingCurve:QEasingCurve

這個(gè)屬性保留了動(dòng)畫(huà)的緩和曲線。
他定義了緩和取消,默認(rèn)情況下,使用線性緩和曲線,產(chǎn)生線性插入值。下面舉出其他曲線的例子:
QEasingCurve::InCirc 這個(gè)屬性提供了圓形入口曲線。
QEasingCurve::InOutElastic這個(gè)屬性為插入值提供了彈性效果。
QVarantAnimation將使用QEasingCure::valueForProgress()將把動(dòng)畫(huà)的“常規(guī)進(jìn)度”(currentTime/totalDuration)轉(zhuǎn)化為動(dòng)畫(huà)使用的實(shí)際有效進(jìn)度。當(dāng)interpolated()被調(diào)用時(shí)這將會(huì)是一個(gè)有效的進(jìn)度。所以keyValues里的步驟將與有效進(jìn)度相關(guān)聯(lián)。
緩和曲線與插入器一起使用,interpolated()這個(gè)虛函數(shù)與動(dòng)畫(huà)的持續(xù)時(shí)間將控制當(dāng)前動(dòng)畫(huà)進(jìn)度改變的值。

博主例子

使用QEasingCurve::InOutSine實(shí)現(xiàn)動(dòng)態(tài)旋轉(zhuǎn)

本次例子很有趣!運(yùn)行截圖如下:

源碼如下
widget.h

#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPoint>QT_BEGIN_NAMESPACE class QPropertyAnimation; QT_END_NAMESPACEnamespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTQ_PROPERTY(qreal index READ index WRITE setIndex)public:explicit Widget(QWidget *parent = 0);~Widget();qreal index()const;void setIndex(qreal index);protected:void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;private:Ui::Widget *ui;QPropertyAnimation *m_animation;QList<QWidget*> listBtn;QList<QPoint> listPoint;qreal m_index; };#endif // WIDGET_H

main.cpp

#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }

widget.cpp

#include "widget.h" #include "ui_widget.h"#include <QPropertyAnimation> #include <QKeyEvent> #include <QDebug> #include <QtMath>#ifndef M_PI #define M_PI 3.14159265358979323846 #endifWidget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);listBtn<<ui->pushButton;listBtn<<ui->pushButton_2;listBtn<<ui->pushButton_3;listBtn<<ui->pushButton_4;listPoint<<ui->pushButton->pos();listPoint<<ui->pushButton_2->pos();listPoint<<ui->pushButton_3->pos();listPoint<<ui->pushButton_4->pos();ui->pushButton->setFocusPolicy(Qt::NoFocus);ui->pushButton_2->setFocusPolicy(Qt::NoFocus);ui->pushButton_3->setFocusPolicy(Qt::NoFocus);ui->pushButton_4->setFocusPolicy(Qt::NoFocus);m_animation=new QPropertyAnimation(this,"index");m_animation->setDuration(400);m_animation->setEasingCurve(QEasingCurve::InOutSine);this->setWindowTitle("CSDN IT1995");m_index=0;setIndex(0); }Widget::~Widget() {delete ui; }qreal Widget::index() const {return m_index; }void Widget::setIndex(qreal index) {m_index=index;for(int i=0;i<listPoint.size();i++){qreal a=((i+m_index)*2*M_PI)/listBtn.count();int xs=200*qSin(a)+200;int ys=200*qCos(a)+200;QPointF pos(xs,ys);listBtn[i]->setGeometry(xs,ys,100,50);qDebug()<<listBtn[i]->pos();} }void Widget::keyPressEvent(QKeyEvent *event) {int delta = 0;switch(event->key()){case Qt::Key_Left:delta = -1;break;case Qt::Key_Right:delta = 1;break;default:break;}if(m_animation->state()==QAbstractAnimation::Stopped&&delta){m_animation->setEndValue(m_index+delta);m_animation->start();event->accept();} }

?

總結(jié)

以上是生活随笔為你收集整理的Qt文档阅读笔记-easingCurve:QEasingCurve官方解析及实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。