1

QAbstractTableModel のサブクラスを持つ QTableView を介して、大きなテーブル (タイトル、作曲者などを含むプレイリスト...そのため、QListWidget を使用できません) を表示しようとしています。データの取得をオーバーライドする必要がある呼び出しは次のようになります。

QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;

この関数は、すべてのセルに対して毎回呼び出されます (index.row() & index.colum() で指定)。その 1 対 1 を HTML/Ajax に変換すると、ローカル ネットワークでのパフォーマンスが低下することさえあります。

それで、ここで私のオプションは何ですか?QSqlQueryModel が存在し、同じ問題を抱えている必要があるため、これは可能である必要があります。Ajax/QAbstractTableModel の組み合わせをグーグル検索しても、何も返されませんでした。

何か案は?

PS: QT-Sources を見ると答えが分かりsrc/sql/models/qsqlquerymodel.cppます。それは可能ですが、誰かがすぐに使えるソリューションを知っているかどうか疑問に思っています。

4

1 に答える 1

1

要するに、はい、ソースQSqlQueryModelまたは派生物を見て学んだ概念を利用したいと思うでしょう。この例では、dは実際にはデータを含む真のモデル ストレージであり (この場合、フェッチが発生する必要があるかどうかを判断するためのデータとインデックスを含む SQL クエリが含まれています)、QSqlQueryModelはプロキシ クラスとして機能しているだけであると考えることができます。その上に、Qt のモデル/ビューの概念との統合のために。

ここのオフィスでも同様の状況があり、セルごとにデータを照会すると非常に非効率になります。そのため、ネットワーク全体のすべてのリクエストを効率的に処理し、それを抽象化するクラスを作成しました。次に、非常に単純なQAbstractTableModel派生クラスを使用して真のモデル クラスと対話し、Qt が必要とするデータを提供します。それは非常にうまく機能します。

データを受信または削除するときに、beginInsertRows/endInsertRowsbeginRemoveRows/の間でモデル データを適切に操作していることを確認してくださいendRemoveRows

于 2012-07-26T02:42:22.347 に答える