2017-02-07 3 views
0

そのようなこの一つとして私が対処しなければならないデータ構造を、編集することは非常に適しているようだので、私はQtのモデル/ビューパラダイムを学んでいる:複雑な階層モデルを2つの部分ビューに分割する方法は?

Addition 
|_QuadraticFunction 
| |_intercept=0.2 
| |_slope=0.0 
| |_quadratic=1.2 
|_Multiplication 
    |_LinearFunction 
    | |_intercept=0.0 
    | |_slope=-8.9 
    |_Gaussian 
     |_center=0.6 
     |_sigma=0.4 

私のデータ構造はで構成され各機能には独自の特性があります。しかし、複雑な構造には長すぎる可能性があるため、データ構造全体を単一のTreeViewに表示したくありません。代わりに、関数名だけを含む1つのビューと、マウスのクリックでユーザが前のビューで選択した関数のプロパティのみを表示する他のビューを表示するとします。

(FunctionsView、最初のビュー)この例では

Addition 
|_QuadraticFunction 
|_Multiplication 
    |_**LinearFunction** 
    |_Gaussian 

(selectedFunctionView、第2のビュー)

intercept 0.0 
slope -8.9 

、ユーザは、最初のビューでLinearFunctionをクリックし、そして第2のビューが自動的に示されましたその特性。
私の質問は:私はすべてのデータ構造(関数名と関数のプロパティ)を単一のモデルの下に保持し、上記のようなモデルの部分だけを表示する2つのビューを持つことができますか?そうでない場合は、部分的なビューごとに1つのモデルを作成する必要があります。各モデルはデータ構造のさまざまな部分を索引付けしますか?助けてください、私はこれに慣れていません。

.Jose

答えて

0

はい、あなたは絶対に2つの異なるビューで一つのモデルでそれをすべて保つことができます。おそらく、QSortFilterProxyModelを調べたいと思うでしょう。それぞれのビューに対してこれらのいずれかを設定します。プロキシは並べ替えとフィルタリングを適用し、ここではフィルタリングがより完全なモデルに適用されます。メインビューで何かを選択すると、他のプロキシモデル(または他のビューとそのプロキシに渡された信号)によって取り上げられ、その後新しく選択されたアイテムに基づいてフィルタリングされた信号を発行することになります。実際には全体的に使いやすいです。最も簡単な間違いは、プロキシのモデルインデックスと、完全なモデルのモデルインデックスがあるため、どちらのモデルインデックスを使用するのか混乱していることです。ドキュメントは必要な場所ではっきりとしていますが、それを余すく認識するのに役立ちます。

詳細については、ドキュメントをご覧ください。その他のご質問がある場合は、お尋ねください。

+0

ありがとうございました!単一のモデルは、私がすべてを同期させておきたいものです:D – jmborr

+0

あなたは大歓迎です。いい質問です。一つのモデルが間違いなく道のりです。私は最近、QtのMVCの仕組みを通して、カスタムビューを一から書くことを含めて、実質的に作業しました。それは非常にうまく設計されたシステムです。 – goug

関連する問題