2011-01-17 1 views
1

誰かが助けてくれるのだろうか?Qt - QEasingCurveの出力をアニメーション以外のものに使用する

たとえば、QAnimationを駆動する以外の目的でQEasingcurveの出力を使用する場合、これは可能ですか?たとえば、私が成長したい、オーバーシュートして戻ってきたGUI上の数値を読んだら、この目的のためにQEasingcurveを使うことができますか?

私はかなりの間Qtを使用しましたが、これらの部分で何かを手抜きしたことはありません - 私はそれを解決しようとしていますが、できないので、ここで尋ねると思いました。

答えて

2

表示する内容を正しく理解できていませんが、私が理解しているところでは、QPropertyAnimationを使用してください。

質問にお答えするには、もちろんQEasingCurveをスタンドアロンで使用することができます。valueForProgress(qreal progress)メンバー機能を使用するだけです。

+0

ありがとうございます - 私はそれを使用してGauge要素の位置を制御したいと思います。私はQt SVGゲージを1つ用意しており、ゲージ針の位置を更新するだけで制御します。私はゲージをオーバーシュートとバウンスを与えることでもう少し現実的に見せたいと思っていました。私はあなたがそこに提案したもので遊んで、私が思いつくことができるものを見ます。 – Matt

+0

'qtsvdialgauge.h'で見たことから、ゲージの実際の値はプロパティではありません(' minimum'、 'maximum'、' startAngle'と 'endAngle'はすべてプロパティですから少し奇妙に思えます)。 。)したがって、 'QPropertyAnimation'を使ってアニメーション化することはできません...あなたはあなた自身でそれをアニメーション化しなければならないでしょう。 –

1

ちょっと - 誰かが将来それを見ている場合に備えて、これをどのように実行して更新したかったのですか?

void RPM::updateGauge(float speed) 
{ 
    easing = new QEasingCurve(QEasingCurve::OutElastic); 

    easing->setAmplitude(1.0); 

    currentPosition = (float)ui->svgdial_currentSpeed->value(); 
    newPosition = speed; 
    difference = newPosition - currentPosition; 

    interval = 0.0; 

    timer = new QTimer(this); 

    connect(timer, SIGNAL(timeout()), this, SLOT(doGaugeMovement())); 

    timer->start(60); 

} 

void RPM::doGaugeMovement() 
{ 
    interval+=0.01; 
    ui->svgdial_currentSpeed->setValue(currentPosition + (difference * easing- 
              >valueForProgress(interval))); 


if(interval >= 1.0) 
{ 
    timer->stop(); 
} 

} 

タイマーを使用してゲージをゆっくりと更新し、毎回新しい位置のvalueForProgress結果を取得するだけです。

関連する問題