3

私は自分のQAbstractTableModel-descendant クラスとQTableView. 編集が終了すると、モデルはそのsubmit()またはrevert()スロットへの信号を受信します。ただし、パラメーターがないため、モデルはデータストアに送信 (更新) する必要があるレコードを認識しません。をキャッチして独自の変更追跡をセットアップしようとしましたmodel.setData()/removeRows()/insertRows()が、ちょっと混乱しています。それを行う正しい方法はありますか?

4

1 に答える 1

1

のドキュメントによるとQAbstractTableModel

サブクラス化

QAbstractTableModel をサブクラス化するときは、rowCount()、columnCount()、および data() を実装する必要があります。index() および parent() 関数のデフォルトの実装は、QAbstractTableModel によって提供されます。正常に動作するモデルは、headerData() も実装します。

編集可能なモデルは、setData() を実装し、flags() を実装して、Qt.ItemIsEditable を含む値を返す必要があります。

setDataしたがって、 、removeRows、およびを再実装しているという事実insertRowsは適切です。このクラスの他のサブクラスも独自の内部キャッシュを使用して変更内容を追跡し、必要に応じてデータ ソースにコミットできるようにします。これまでのアプローチが混乱している場合は、パスが正しいため、おそらく現在行っていることを改善する必要があります。

setData内部データ構造で何が変更されているかを追跡できます。たとえば、モデルが内部的に基本的なディクショナリであり、Web ベースの REST サービスに送信する場合、内部ディクショナリでデータへの変更を管理します。がsubmit呼び出されると、その内部キャッシュを使用して必要な REST 呼び出しを行い、データを送信して同期します。

于 2012-10-08T20:09:33.640 に答える