18 QList<QVariant> rootData;
40 const QModelIndex&
parent)
const
42 if (!hasIndex(row, column,
parent))
61 return createIndex(row, column, childItem);
77 auto* childItem =
static_cast<TreeItem*
>(
index.internalPointer());
85 return createIndex(parentItem->
row(), 0, parentItem);
133 if (!
index.isValid())
138 if (role == Qt::EditRole || role == Qt::DisplayRole)
140 auto* item =
static_cast<TreeItem*
>(
index.internalPointer());
151 if (!
index.isValid())
156 if (role == Qt::EditRole)
158 auto* item =
static_cast<TreeItem*
>(
index.internalPointer());
166 if (!
index.isValid())
168 return Qt::NoItemFlags;
171 return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
181 auto* item =
static_cast<TreeItem*
>(
index.internalPointer());
193 if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
209 beginRemoveRows(
parent, position, position + count - 1);
221 QList<TreeItem*> parents;
222 QList<int> indentations;
228 while (number < lines.count())
231 while (position < lines[number].length())
233 if (lines[number].mid(position, 1) !=
" ")
240 QString lineData = lines[number].mid(position).trimmed();
242 if (!lineData.isEmpty())
245 QStringList columnStrings =
246 lineData.split(
"\t", Qt::SkipEmptyParts);
247 QList<QVariant> columnData;
248 for (
int column = 0; column < columnStrings.count(); ++column)
250 columnData << columnStrings[column];
253 if (position > indentations.last())
258 if (parents.last()->childCount() > 0)
260 parents << parents.last()->child(
261 parents.last()->childCount() - 1);
262 indentations << position;
267 while (position < indentations.last() && parents.count() > 0)
270 indentations.pop_back();
275 parents.last()->appendChild(
276 new TreeItem(columnData, parents.last()));
Objects nodes for the TreeModel.
virtual int childCount() const
virtual int columnCount() const
TreeItem * parentItem() const
TreeItem * child(int row) const
bool removeChildren(int position, int count)
virtual bool setData(int column, const QVariant &value)
virtual QVariant data(int column) const
void setupModelData(const QStringList &lines, TreeItem *parent)
bool removeRows(int position, int count, const QModelIndex &parent) override
TreeItem * getItem(const QModelIndex &index) const
int rowCount(const QModelIndex &parent=QModelIndex()) const override
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
QVariant data(const QModelIndex &index, int role) const override
QModelIndex parent(const QModelIndex &index) const override
TreeItem * rootItem() const
TreeModel(QObject *parent=nullptr)
int columnCount(const QModelIndex &parent=QModelIndex()) const override
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Qt::ItemFlags flags(const QModelIndex &index) const override
bool setData(const QModelIndex &index, const QVariant &value, int role) override