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),您应该能够识别item 和它的 parent

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

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

于 2012-02-28T16:53:40.347 回答