内のデータのサブセットであるかに基づいていることをデータはのいくつかを以下試していないとPyQtまたはPySideで提供されるサンプルプログラムを見てください。
モデルは、データを格納するオブジェクトです。これは、文字列のリストと同じくらい簡単です。ビューは、データを表示するオブジェクトです。 Qtは、一般的なタイプのデータを保存するためのいくつかの標準モデルと、一般的なタイプのデータを表示するための標準ビューを提供します。単純なケースでは、これらのあらかじめ構築されたコンポーネントを使用することができます。これらのコンポーネントには、モデルにデータを追加または削除したり、モデルの変更に応じてビューを更新するための標準的なメソッドがあります。これらの変更は、信号を使用して、モデルからビューに、またはビューウィジェットまたはコントロールウィジェットからモデルに伝播されます。メソッドとシグナルの標準化された名前付けにより、これらはすべてシームレスに機能します。
ただし、特定のデータストレージまたはデータ表示のニーズは多少異なる場合があります。この場合は、カスタムモデルまたはカスタムビューを実装するか、必要に応じて両方を実装できます。フレームワークによって提供されるクラスの1つをサブクラス化することによって、カスタムモデル(またはビュー)を実装します。これらのサブクラスで特定の名前付きメソッドを実装する必要があります。これは、他のコンポーネントとの自動動作を機能させる標準的な名前付けですが、自分のカスタムメソッドを追加することもできます。
さらにMiniMeのコメントに続きます:
例を見てみましょう。 Qtモデルには、データ項目を更新するxx.setData()メソッドがあります。このメソッドは、モデルのどこにデータが移動するか(インデックス)と新しいデータを指定するパラメータをとります。そのメソッドを実装するときは、使用する基本ストレージメカニズム(リストや辞書など)にデータを更新し、xx.dataChanged()信号を送出する作業を行います。ビューがこのモデルにリンクされている場合は、この信号にサブスクライブしているので自動的に更新されます。
def setData(self, index, value):
# Update the data in the underlying python list self.my_list
# The index object is of a data type provided by Qt. To perform
# this operation we have to extract the row number where the change
# is to be made, then use that to update the appropriate entry in
# the list.
self.my_list[index.row()] = value
# Create a PyQt modelIndex object based on the row number that was
# updated. The self.index() method is provided by Qt.
modelIndex = self.index(index.row())
# Send the modelIndex of the change to any connected views so they
# know to update themselves
self.dataChanged.emit(modelIndex)
# In reality we'd do some validation checks and return False if there
# was a problem and the data change didn't happen.
return True
新しいデータ項目をリストに追加するか、リストからデータ項目を削除するには、同様の方法を実装する必要があります。これらのメソッドは変更を行い、モデルのどの部分が変更されたかを示す信号を添付ビューに送信してからリターンします。私はこれがもっと役立つことを願っています。
カスタムモデル(別名Qtベースモデルのサブクラス)を使用しているのか、Qtに付属している標準モデル(QStandardItemModel'など)を使用しているのかによって、この質問に対する回答が異なります。 –
私が試しているとき私が標準クラスを探していることを意味するクラスを識別します。データを更新するためのコードを記述すると、デフォルトでは標準クラスではそれが行われません。 – MiniMe