Для обращения к item'у по его индексу:
QTreeWidgetItem* QTreeWidget::topLevelItem(int index) const
Наоборот, для определения индекса item'а верхнего уровня (index):
int QTreeWidget::indexOfTopLevelItem(QTreeWidgetItem * item) const
Удобным может оказаться и такой вызов (возврат указателя выделенного элемента QTreeWidget):
QTreeWidgetItem* QTreeWidget::currentItem() const
Для случая большого числа корневых элементов это более удобно.
Была необходимость создания достаточно разветвленного QTreeWidget, с каждым корневым элементом которого сопоставляется проект расчета, производимого программой и структура дочерних элементов элемента проекта строго типизированная. Для реализации такого дерева использовался потомок QTreeWidget из элементов TreeElement (потомок QTreeWidgetItem с указанием типа элемента ч/з enum). В дереве для индексации по корневым элементам использован QMap<int, TreeElement>. Разумеется, данные проекта расчета хранятся в других объектах (различных типов), хранящихся в контейнерах, причем каждый объект данных хранит указатель на соответствующий элемент TreeElement в дереве. Всего же всех элементов дерева, как правило, не более 80 (определяется числом открытых в программе проектов расчета).