4

強力ではないハードウェア(Atom N270 + Intel 945GSM)でマーキーテキストをスムーズにする方法(Qt 4.5.3を使用)について質問があります。私のアプローチは次のとおりです。

  1. テキスト(36px Arial太字)をQPixmap(オフスクリーンペイントデバイス)に描画します
  2. 30msごとに1pxのコンテンツを左にシフトするようにタイマーを設定しました。
  3. onTimerイベントがトリガーされると、QPixmapを選択し、この部分をウィンドウキャンバスに印刷します。

一般的に、スムーズに動きます。ただし、作成するマーキーテキストが多いほど、CPU使用率が高くなります。テキストが画面の50%(1920x1680)に表示される場合、CPU使用率は約70〜80%です。テキストアニメーションが少しちらつきます。タイマー間隔を50ms以上に設定するとスムーズになります。しかし、テキストの移動が遅すぎます。

私のアプローチは効果がありませんか?OpenGLを使用しますか?ヒントは大歓迎です。よろしくお願いします^^)

4

1 に答える 1

6

Graphics View フレームワークを調べる必要があります。QGraphicsTextItem オブジェクトを QGraphicsScene に追加し、ビューの座標 (ズームと平行移動) を設定して、テキストを移動させ、テキストの一部を「画面外」(ビューの外) にするなど、任意のサイズに表示することができます。 . これは、タイマーイベントごとに QPixmap の (さまざまなサイズの) 部分をコピーしてペイントするよりもはるかに効率的であると期待しています。

ドキュメントには、Graphics View フレームワークが多くのオブジェクトを一度に処理するように最適化されていると記載されています。改善が見られない場合は、4.6 ベータ版を試してみてください。Graphics View レンダリングの最適化が予定されています。

余談ですが、アニメーションを操作するのに役立つ QTimeLine を見てみましょう。ときどき基本的な「ティック」を提供するだけでなく、ゆっくりと開始して速度を上げたり、終了に近づくにつれて速度を落としたりできる「曲線形状」を設定できます。finished() シグナルの後に QTimeLine を再開したい場合、期間を変更して setCurrentTime(0) を呼び出さずに start() を呼び出すと、タイマーは古い期間を現在の時間として開始することに注意してください。

于 2009-11-02T16:18:01.563 に答える