本例在QTreeView创建树结构(一)两层树结构的基础上,创建三层树结构
mymode.h还是那个model
#ifndef MYMODEL_H
#define MYMODEL_H
#include <QAbstractItemModel>
struct Water
{
QString name;
QString prace;
QString weight;
};
struct MyItem
{
int level;
bool checked;
Water data;
QList<MyItem *> children;
};
typedef QList<MyItem *> ItemList;
class MyModel : public QAbstractItemModel
{
public:
MyModel(QObject *parent= 0);
~MyModel();
// 返回当前节点,parent为当前节点的父节点(可能无效,无父节点)
virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
// 返回当前child节点的父节点
virtual QModelIndex parent(const QModelIndex &child) const;
// 返回当前parent节点的子节点的个数(行数),如果没有父节点,则返回0级节点的个数(行数)
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
// 返回当前列数,固定的
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
// 设置1级节点的第0列的选中状态
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
// 设置1级节点的第0列可改变选中状态
Qt::ItemFlags flags(const QModelIndex &index) const;
// 设置表头
virtual QVariant headerData(int section, Qt::Orientation orientation,int role = Qt::DisplayRole) const;
void setMData();
QVariant getItemData(MyItem *item,int col) const;
ItemList getMData();
private:
ItemList m_data;
MyItem *m_root;
};
#endif // MYMODEL_H
mymodel.cpp已不是那个mymodel了
#include "mymodel.h"
#include <QDebug>
MyModel::MyModel(QObject *parent)
:QAbstractItemModel(parent)
,m_root(new MyItem)
{
m_root->level=0;
m_data.push_back(m_root);
setMData();
}
MyModel::~My