Помогите, пожалуйста разобраться с добавлением новых элементов в модель.
Для простого случая с QAbstractTableModel я делаю так:
C++ (Qt)
void tUMCLientsTableModel::ShoutAddNewClient(tUMDCClientInfo aNewClient)
{
beginInsertRows(QModelIndex(), fClientList.fClientList.count(), fClientList.fClientList.count());
fClientList.append(aNewClient);
endInsertRows();
}
Т.е. просто вставляю в список новый объект, используя insertRows. Дальнейшей сортировкой и отображением соответвенно занимаются прокси-модель и комбобокс.
Теперть то же самое мне надо сотворить с моделью дерева QAbstractItemModel. Она построена по методу Бланшета-Саммерфельда, т.е. имеем класс узла дерева со ссылками на детей и родителя, имеем "нулевой" родительский узел - объект класса же узла. Фактически не пользуемся QModelIndex.
C++ (Qt)
RootNode - не отображаемо
--Node1
----Node1.1
----Node1.2
--Node2
--Node3
В текущей ситуации для добавления нового элемента используется такая конструкция:
C++ (Qt)
void tUMClientsModel::AddNewClient(tUMDCClientInfo &aNewClient, bool aUseBeginInsert)
{
if (aNewClient.fClientParentID == 0)
fRootNode->fChildrenList.append(new tUMClientsNode(fRootNode, aNewClient));
else
for (int i = 0; i < fRootNode->fChildrenList.count(); i++)
if (fRootNode->fChildrenList[i]->fClientInfo.fClientID == aNewClient.fClientParentID)
{
fRootNode->fChildrenList[i]->fChildrenList.append(
new tUMClientsNode(fRootNode->fChildrenList[i], aNewClient)
);
break;
}
}
У класса объекта есть поле индекса и поле индекса родителя. При добавлении проверяется соответствие индекса родителя и индекса каждого из текущих узлов.
Для команды beginInsertRows нам необходимо знать QModelIndex узла, в который мы добавляем новый элемент.
Как узнать его для моего класса узла tUMClientsNode - "нулевого" родительского или какого-то иного
?Для обратного преобразования внутри модели используется
C++ (Qt)
tUMClientsNode *lNode = static_cast<tUMClientsNode*>(aParent.internalPointer());
Спасибо!