Вам нужно позвонить QAbstractItemModel::createIndex
, передав правильные значения row
, column
и сам элемент.
Должно работать следующее:
QModelIndex TreeModel::indexForTreeItem(TreeItem* item)
{
return createIndex(item->childNumber(), 0, item);
}
Объяснение того, как я пришел к этому:
createIndex
также принимает указатель данных void*
, который в примере кода EditableTreeModel
TreeModel
является указателем на TreeItem
. Это можно видеть в функции-члене TreeModel::index
:
QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) const
{
if (parent.isValid() && parent.column() != 0)
return QModelIndex();
TreeItem *parentItem = getItem(parent);
TreeItem *childItem = parentItem->child(row);
if (childItem)
return createIndex(row, column, childItem); // <-- here childItem is the TreeItem*
else
return QModelIndex();
}
Обратите внимание, что QAbstractItemModel::createIndex
является защищенной функцией, поэтому вам нужно добавить новую функцию-член в TreeModel
, которая создаст для вас QModelIndex
.
Чтобы вычислить строку для данного TreeItem
, есть функция-член childNumber
, которая возвращает свой индекс в списке дочерних элементов своего родителя (то есть: его строка)
К сожалению, невозможно вычислить столбец для данного TreeItem
, поскольку TreeItem
содержит все данные для его столбцов, поэтому охватывает все столбцы. Таким образом, разумным значением по умолчанию будет использование 0
(крайний левый столбец)