2016-10-28 11 views
1

私は2つの方法でデータを表示したい異なるビューで異なる方法で同じモデルのデータを表示する

[ 
    {'name': 'one', 'dir': '/path/to/foo'}, 
    {'name': 'two', 'dir': '/path/to/bar'}, 
] 

次のようになり、いくつかのデータを持っているとしましょう - フラットおよびネストされた(好ましく使用を両方のためのQTreeViews):

フラット

flat tree

ネストされた

nested_tree

理想的には、私は彼らの両方が同じデータを使用するように、同じモデルを使用したいと私は他のと同期して、それらの各々を維持する心配する必要はありません。

問題はモデル/ビューシステムでは、階層はモデルが制御するものでありビューではないものと思われます。このシナリオでモデル/ビューフレームワークを使用するにはどうすればいいですか。

「ビューの種類」によって異なるものを返すようにモデルをオーバーライドする必要があります。モデルの「派生」アイテムのカスタム描画を行うビューをオーバーライドする必要がありますか?実際のモデルのデータを各ビューで表示できるものに変換するために使用できる「itermediateモデル」のようなものがありますか?

+0

フラット構造とネスト構造の両方を表す単一のモデル(たとえば、「QStandardItemModel」)を使用できます。しかし、同時に*両方を行うことはできません。あなたのデータにも同じことが言えます。同時にフラットでも入れ子にもなれません*。 1つのタイプから別のタイプへの変換には、何らかの再構成変換が必要です。おそらく、異なる構造を表すアダプタを備えた単一の低レベルのデータモデルを持つことは可能でしょう。しかし、2つの別々のモデルを単純に同期させるよりも、これが簡単に維持できるかどうかはわかりません。 – ekhumoro

答えて

0

プロキシモデルを使用して構造を変換することが可能なはずですが、KItemModelsフレームワークにはその方法の例がいくつかあります。

しかし、同一の基礎データを表示することは、異なるモデルを同じデータ上で動作させることによっても達成することができる。

I.e.モデルはデータへのインタフェースに過ぎず、データを所有または格納する必要はありません。

変更について通知できるデータコンテナクラスを実装し、同じコンテナオブジェクトを使用して必要な方法でデータを提示する2つのモデルを作成できます。

関連する問題