Необходимо реализовать пользовательскую модель дерева. Открыл edittabletreemoldel example из SDK (Examples/itemviews/editabletreemodel). Не разобрался.
Там кроме класса самой модели реализован ещё класс узлов, объекты которого используются в реализации класса модели.
Если отбросить в сторону изначальную инициализацию модели данными из файла с помощью метода setupModelData(const QStringList &lines, TreeItem *parent), то добавление строк и строк-потомков осуществляется двумя соответствующими слотами: insertRow(), insertChild() и в данном примере эти слоты получают индексы родительского узла модели куда именно надо добавить строку (или строку потомка) из метода currentIndex() модели вытащенной из представления.
Мне же надо инициализировать свою модель не выбирая родительские узлы по кликам мышки, а анализируя другую модель по некоторому алгоритму в цикле. Прежде всего нужен метод возвращающий QModelIndex узла, в который вставлять строку.
Методы index() и parent() возвращающие индекс узла и его родителя реализованы в классе модели TreeModel. Но бизнес-дата храниться в объекте rootItem (то есть в объекте класса treeItem), а он уже не имеет никаких индексов. И в примере из SDK я не понимаю как найдя айтим получить его индекс.
Поиск айтимов в модели по данным реализован в QStandartItemModel. Аналогичный метод накатал и я:
QList<TreeItem *> TreeModel::findItems(QString dataColumn, int column)
{
TreeItem item = rootItem;
QList<TreeItem *> items;
for(int i = 0; i < item.childCount(); i++) {
if(item.child(i)->data(column) == dataColumn)
items.append(item.child(i));
}
return items;
}
Как по найденному айтиму получать QModelIndex(). Вообще я с этим экзамплом не разобрался. Чтение документации не помогла. Где бы мне почитать как подобные модели деревьев реализуются и работают?