私はQPropertyAnimation
単にダニの供給源として使用します。1秒のアニメーション、無限のループ回数を設定start()
し、「ティックハンドラー」で QElapsedTimer::elapsed() を呼び出して監視し、アニメーションの開始からの経過時間を把握します。したがって、ループ数、アニメーションの開始値と停止値には依存せず、アニメーション化されているプロパティ値も気にしません。まさにダニの元!
その前はQTimer
、Linux と Windows で異なる結果が得られるものを使用していました。Linux でアニメーションをスムーズにするには、QTimer
間隔 = 1000/30 を使用する必要がありましたが、Windows では 1000/60 が最小でした。だから私は #ifndef を使わなければなりませんでしたが、それは汚いコードです。それに加えて、QTimer はシグナルスロット機構を使用しますが、QPropertyAnimation は使用しないため、私の QApplication イベントループはアニメーションイベントでビジーではありません (私は正しいですか?)
ここN
で、ウィジェット (それぞれに異なる種類のアニメーション) をアニメーション化する必要があり、QPropertyAnimation を同じ方法で使用します - 同じ愚かな目盛りのソースとして。
これらのバリアント間の CPU コストの違いは次のとおりです。
N
QPropertyAnimation
それぞれが独自のウィジェットに接続された実行中のインスタンス。Qt のドキュメントによるとQPropertyAnimation
、約 60fps でティックが発生します = ティック間で約 17 ミリ秒。N
しかし、Qt は異なるインスタンスから同時にティックを起動することはできませんQPropertyAnimation
。これは、これらのアニメーションを異なる time() で開始した可能性があるためですQPropertyAnimation::start()
。- ティックをウィジェット
QPropertyAnimation
に送信するある種のプロキシ オブジェクトに接続された1 つの実行中のインスタンス。N
そして、そのようなすべてのウィジェットには、そのためのメンバー「animTick(void)」があります。