3

QTreeView で表示したいネストされたデータ構造があります。

私がこのようなものを持っているとしましょう:

class Image
{
public:
  ...
  std::vector<Filter> filter_;
};

typedef std::vector<Image> Gallery;
typedef std::vector<Gallery> Galleries;

QTreeView は、次のように MultiGallery を表示する必要があります。

Gallery1   
  |_____Image1   
  |_____Image2   
  |_____Image3 
Gallery2  
  |_____Image1
  |       |_____Filter1
  |       |_____Filter2  
  |_____Image2

Qt モデル ビューの例を読みました。QAbstractItemModel から派生してツリーモデルを作成し、メンバー関数を実装する必要があることはわかっています。

QVariant data(const QModelIndex &index, int role) const;
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const;
QModelIndex parent(const QModelIndex &index) const;
int columnCount(const QModelIndex &parent=QModelIndex()) const;
int rowCount(const QModelIndex &parent=QModelIndex()) const;

これら、特にインデックス関数を実装する最良の方法がわかりません。

4

1 に答える 1

1

主なアイデアは、インデックス (つまり、行、列、および internalId または internalPointer) を持つことで、アイテムとその親の両方を識別できるはずです。

あなたのデータ構造はこの要件に適合しません。親オブジェクトへのリンクをオブジェクトに追加するか、何らかの補助構造を使用してこの情報を保存する必要があります。

次に、アイテムへのポインタ(または補助構造へのポインタ、または構造体の配列内の補助のインデックス)をインデックスに格納できます。

于 2012-02-28T16:53:40.347 に答える