2016-10-04 16 views
0

おそらく私はこれについてすべて間違っていると思っているかもしれませんが、はQtで作業ツリーモデルを持っていると奇妙に思えるので、アイテムクラスにデータをラップする必要があります。Pysideのツリーモデル

QTreeView用に作成された各モデルでは、カスタムNodeまたはTreeItemクラス(多くの場合、型(オブジェクト))の実装が必要でした。これは、多くの理由で私に奇妙なものです:

)モデルがデータを直接抽出できる点ではありませんか?ノードまたはTreeItemクラスは余分な手荷物のようです。

b)ツリービューに特別なアイテム/ノードクラスが必要な場合でも、そのクラスがQObjectのようなものではないのはなぜですか?私が見たNode実装のほとんどはget/set親/子メソッドと属性の集合を持っています。 QObjectを使ってみると、すでにすべて組み込まれているようですが、なぜそれを使わないのですか?

ツリーモデルを実装するために余分なNodeクラスが必要な場合は、Qtフレームワークデザインのギャップがあるか、またはそれ。

私はQStandardItemとQStandardItemModelを漠然と認識していますが、他のモデル&のmodelItemsと同じようにQtGuiではなくQtCoreの一部である理由を尋ねています。これらのクラスをQtGuiでグループ化すると、ビュー&のモデルが混在しているように感じます。 QtGuiクラス(QtCoreのクラスから継承していない)から継承していないので、QtGuiにもなぜこのようになっているのか理解できません。

誰もがこのデザインを正当化できるとすれば、私はそれを誤解していると説明しています(または私の欲求不満に関連しています)。

ありがとうございます!

答えて

0

は長年にわたって(数十年?)を多数QAbstractItemModelベースのデータモデルを実装した私は、しかし、あなたの欲求不満を理解して...

はQtの中に作業ツリーモデルを持って、一つは、データをラップする必要がありますアイテムクラス。

全くありません。多くの場合、モデル行を独自のクラスにカプセル化することは意味があります。各列はアイテムの異なるプロパティを表します(たとえば、QFileSystemModelの実装方法を考えてください)。

)モデルがデータを直接抽出できる点はありませんか?ノードまたはTreeItemクラスは余分な手荷物のようです。

あなたは直接QAbstractItemModel::dataQAbstractItemModel::setData

Bを使用してデータを設定/取得することができます)特別なアイテム/ノードクラスは、ツリー表示のために必要とされた場合でも、なぜそのクラスは、いくつかのではないでしょうQObjectの種類?私が見たNode実装のほとんどはget/set親/子メソッドと属性の集合を持っています。 QObjectを使ってみると、すでにすべて組み込まれているようですが、なぜそれを使わないのですか?

QObjectはかなり重要です。モデルには数千の行があり、各行にはかなりの数の列を持たせることができるので、各セルにQObjectを継承させることはそれほどスケーリングできないことは理解できません。

私はQStandardItemとQStandardItemModelの漠然と認識していますが、彼らはQtGuiなくQtCoreの一部である、なぜ自分が& modelItemsがある他のモデルとして、求めて見つけます。したがって、それはQtGuiの一部である必要があり、そのようなQIconQBrushなどのいくつかのQtGuiタイプ -

QStandardItemはを利用する - したがってに依存しています。

私の言うように、私はあなたの不満を理解していますが、かなり一般的なままであれば、Qtコードは実際には非常に使用可能です。

+0

これは納得のいかないことです。data/setDataメソッドはデータを直接提供できるはずです。しかし、公式Qtの例でさえどこでも実演されていることを見るのは難しいと思っています。あなたが私に非常に助けてくれる2つの深いツリーモデルの実装を提供できるかどうか。私はcreateIndex()とparentのように、定義する必要のあるメソッドがあることを知っていますが、内部的に(またはビューと通信するときに)どのように使用されるかは少し不透明です。 –

+0

おそらく、私が最も苦労しているのは、操作の流れを理解していて、循環依存性を感じているという感じです。データ要求はインデックスに渡され、そのインデックスはcreateIndex()の行、col、parentに渡され、親は子を持ちます。子はインデックスを持ちますが、私は迷っています。 –