我有一个要与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 Model View的例子,我知道我必须从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;
我只是不知道实现这些的最佳方法是什么,尤其是索引函数。
最佳答案
主要思想是拥有索引(即行,列和internalId或internalPointer),您应该能够识别项目及其父项。
您的数据结构不符合此要求。您应将指向父对象的链接添加到您的对象,或使用一些辅助结构来存储此信息。
然后,您可以在索引中存储指向项目的指针(或指向辅助结构的指针,或结构数组中更好的辅助索引)。
关于c++ - 嵌套 vector 的Qt自定义树模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9484519/