1

QTableView/QTreeview の更新の遅さを 2 つの場所に分離しました。

QStyledItemDelegate::paint()
Q_EMIT dataChanged()

私は多くのことを試しましたが、モデルのデータ メソッドは事実上何もせず、文字列を返すようにしました。列が少ない場合 (10 以下など)、GUI は非常に鮮明です。私のエンド ユーザーは 2560x1600 の巨大なモニターを持っており、50 を超える列と行を表示できるビューを最大化するのが好きで、GUI がいかに遅いかについて常に不満を言っています。モデルが完全に設定されると、挿入も削除もありません。私が行っているのはdataChanged()、合理的な速度で新しい更新を取得し、行ごとに 1 秒あたり 2 回、1 秒あたり約 48 ~ 100 行の更新を発行することだけです。

グラフィック システムを OpenGL に切り替えてみましたが、役に立ちません。

  • dataChanged()私のCPU使用率だけをコメントアウトすると、約16%です
  • QStyledItemDelegate::paint()私のCPU使用率だけをコメントアウトすると約30%です
  • すべてを有効にして実行すると、100% になります

これらの統計に基づいて、遅さは何らかの形で Qt に関連していると思います。これを修正する魔法の設定はありますか?

4

1 に答える 1

-1

私のコメントへの回答であなたが書いたことに関して、答えは、dataChanged シグナルを発するコードをリファクタリングする必要があるということです。1 秒間に 2 ~ 3 回以上発行しても意味がありません。したがって、ある種のプロキシ/一時ストレージに変更を蓄積し、たとえば timerEvent に基づいて個別に発行 dataChanged を発行する必要があるため、CPU にストレスを与えることなく特定のリフレッシュ レートで保証されます。

于 2013-08-13T18:26:29.930 に答える