Qt嵌套向量的自定义树模型

时间:2012-02-28 15:16:09

标签: c++ model-view-controller qt qtreeview

我有一个嵌套的数据结构,我想用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;

我只是不知道实现这些的最佳方式,尤其是索引函数。

1 个答案:

答案 0 :(得分:1)

主要思想是拥有一个索引(即row,column和internalId或internalPointer),你应该能够识别项目及其父项

您的数据结构不符合此要求。您应该将父对象的链接添加到对象,或使用一些辅助结构来存储此信息。

然后,您可以在索引中存储指向项目的指针(或指向辅助结构的指针,或者更好的结构数组中的辅助索引)。