4

社内の一部の Linux ベースの組み込みデバイスに Qt 4.8.5 を使用しようとしています。XサーバーなしでQt組み込みを使用しています。測定データをプロットして頻繁に更新する必要があります (20 ~ 30 fps、ただしウィジェットのごく一部のみ)。システムは ARM ベースの 400Mhz で、GPU も FPU もありません。QWidget をサブクラス化し、paintEvent() をオーバーライドしました。WA_OpaquePaintEvent と WA_StaticContents が設定されています。テストのために、私のペイント イベントは空で、50 ミリ秒に設定されたタイマーからウィジェットの update() 関数を呼び出します。私の問題は、空の更新プログラムが CPU の 30% を消費していることです。アップデートの範囲によって金額が変動するので、QTがバックグラウンドで何かを再描画することもあると思います。多くの投稿を読みましたが、問題の解決策が見つかりません。更新呼び出しをコメントアウトすると、CPU 使用率は ~1% に低下します (ウィジェットをテストするためにタイマーでサインを生成しても、空の関数呼び出しよりもはるかに複雑になるはずです)。私のウィジェットは長方形で、透明ではなく、ペイント イベントから完全な描画手順を処理したいと考えています。

このオーバーヘッドを削減し、塗装プロセス全体を自分で処理することはできますか?

4

1 に答える 1

1

「空の更新」は空ではありません-ウィンドウ全体を再描画します:)

下記はお読みになりましたか?

リアルタイム プロット ウィジェットやグラフ ウィジェットなど、単純な背景色でカスタム ウィジェットを迅速に更新するには、適切な背景色を定義し (QPalette::Window ロールで setBackgroundRole() を使用)、autoFillBackground プロパティを設定し、ウィジェットの paintEvent() で必要な描画機能を実装します。

も使用する必要がありますQWidget::scroll()。これは、ウィンドウのバッキング ストアを内部的にスクロールするためです。これは、小さなスライスだけが追加された場合に全体を再描画するよりもはるかに効率的です。

于 2013-08-26T17:49:49.803 に答える