You can build a map from TreeItem to QModelIndex as following :
void buildMap(const QModelIndex &index, const QAbstractItemModel *model, QMap<TreeItem *, QModelIndex> &itemMap)
{
if( !index.isValid() )
return;
TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
itemMap.insert( item, index );
int rows = model->rowCount(index);
int cols = model->columnCount(index);
for (int i = 0; i < rows; ++i)
for (int j = 0; j < cols; ++j){
QModelIndex idChild = model->index(i, j, index);
buildMap( idChild , model, itemMap );
}
}
The function buildMap should be used as :
QMap<TreeItem *, QModelIndex> itemMap;
TreeModel *model = static_cast<TreeModel *>(view->model());
for (int row = 0; row < model->rowCount(); ++row){
buildMap( model->index(row,0), model, itemMap );
}
qDebug() << "Item map count : " << itemMap.count();
foreach( TreeItem * item, itemMap.keys( )){
qDebug() << "item " << item << " -> " << itemMap[ item ];
}
Output:
Item map count : 35
item 0xbe1fe8 -> QModelIndex(1,1,0xbe1fe8,TreeModel(0x4421390))
item 0xbe2020 -> QModelIndex(2,1,0xbe2020,TreeModel(0x4421390))
item 0xbe22f8 -> QModelIndex(3,1,0xbe22f8,TreeModel(0x4421390))
item 0xbe2330 -> QModelIndex(2,0,0xbe2330,TreeModel(0x4421390))
...