2016-06-27 4 views
1

異なる種類のメディアを管理するライブラリツールを実装したいとしましょう。したがって、私は基底クラスミディアムクラスと派生クラスを持っています。追加のプロパティを持つブックとDVD。同じデータソースで動作するAbstactTableModels

私の問題は、モデルを正しく設計する方法がわかりません。 Mediumクラスの基本プロパティだけでなく、派生クラスの特別なプロパティを持つ別のTableView内のDVDだけで、メディアを1つのTableViewに表示できるようにしたい。 DVDを削除すると、Mediaテーブルでも削除されます。したがって、私は彼らは同じデータソースを持つ必要があると思った。

これを実現する最善の方法は何ですか?その問題を示す例は見つかりませんでした。

答えて

0

3つのソース(メディア、DVD、ブック)のすべての列を含む単純なモデルです。

「中」の列のみを表示し、他の表示では「dvd」列のみを表示することができます。しかし、モデルオブジェクトは、すべてのビューにソースとして適用されるオブジェクトです。

モデルから1つの行が削除されると、すべてのビューが適切に更新されます。 「追加」と同じです。

+0

私のモデルにあるMediumオブジェクトのQList。 DVDだけを表示したいのであれば、Booksには表示する "dvd"カラムがないので、他のタイプがどうにか除外されていることを確認する必要があります。私はそれらをDVDリストに表示させたくないから...隠しておくカラムだけでなく、DVDを含まない行もフィルタリングする必要があります。 – trixn

+0

dvd-> booksなどの木のように単純な行のようなモデルではなく、構造化されている場合は、データソースを1つの場所(モデル)に保存したい場合はツリー形式のモデルを設計して操作できますビューを適切な(プロキシ)モデルにするためにプロキシを使用します。 http://lynxline.com/category/models/、特にこのモデルについての記事:http://lynxline.com/jongling-qt-models/をご覧ください。モデルをプレーンに変換する。 – yshurik

0

(例えば、見てみましょう:http://doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html#treeitem-class-definition)独自のツリーアイテムを実装:に、プロキシモデル(http://doc.qt.io/qt-5/qsortfilterproxymodel.html#details詳細な例)を使用し、型を操作するあなたのツリー項目のためのメソッドを追加し、タイプと列挙型のようなものを追加

をソートデータ。

のように:私は、例えば、単一のデータソースを持っている場合、これが動作する方法を見ていない

enum Property {Book, DVD, Other }; 
class TreeItem 
{ 
... 
public: 
Property GetProperty() const; 
void setProperty(Property iProp); 
... 
}; 
+0

あなたの答えをありがとうが、私はまだ少し混乱しています。どのようにすべてのものを結びつけるのか、ちょっと正確なことができますか?私が見ている間、どのようにモデルが構造化されているのですか? DVDはこのモデルを使用しています。例えば、TableViewはheaderDataをどのように取得するのですか?何を表示したいのかによって異なります。中程度のオブジェクトは、例えば、タイトルと作者は、DVDは、例えば、追加で表示する長さプロパティ。あなたの助けを前にありがとう。 – trixn

+0

私は、私のサブクラスに対応するヘッダデータを取得するproxymodelでheaderData()をreeatmentする必要がありますか?どのように私はプロキシモデルの助けを借りてDVDをフィルタリングするのですか? – trixn

+0

プロキシモデルでフィルタメソッドを再実装する – jonezq

関連する問題