1

約 1000 行のモデルがあり、列の 1 つが毎秒変化します。行が変更された直後にフィルター処理されるように、実際のモデルとテーブル ビューの間に独自の並べ替え/フィルター モデルを配置しました。

ここで問題が発生します。テーブル ビューで何も選択されていない場合、すべてが正常に機能します。しかし、いくつかの行を選択すると、テーブルが遅れます。選択された行が多いほど、遅れが大きくなります。

なんで?誰かが私にヒントを与えてくれることを願っています、事前に感謝します!

4

2 に答える 2

0

選択が有効になっているテーブルの (上部) ヘッダーを描画しているときに、関数は次のことを行います。

bool QItemSelectionModel::isColumnSelected(int column, const QModelIndex &parent) const

が呼び出されます (列ごとに 2 回 - ただし、選択モードによって異なる場合があります)。この関数は、選択されたすべての行を反復処理します (「qitemselectionmodel.cpp」Qt 4.8.5 の 1333 行目)。そのため、多数の行が選択されている場合、各ヘッダー列の描画は非常に遅くなります。

列/行が切り替えられた左ヘッダーについても同じです。

呼び出された関数はほとんど仮想的ではないため、独自のヘッダーを完全に描画するか、ヘッダーを非表示にしない限り、これを回避する方法はないようです。

おそらくQtはこれを最適化する必要があります。

于 2014-04-03T07:24:31.030 に答える
0

申し訳ありませんが、QTableView ではパフォーマンスが低下する可能性のある場所がたくさんあります。

速度低下を特定する最も簡単な方法は、アプリケーションのプロファイルを作成することです。CPU を消費する呼び出しがある場合、原因を推測して修正する方がはるかに簡単です。

また、カスタムの並べ替え/フィルター プロキシの設計についてもあまり語っていません。QSortFilterProxyModel を使用する場合は、うまくスケーリングしないことに注意してください。

于 2013-05-14T08:31:21.153 に答える