Привет всем!
Есть xml-ка, в ней хранятся несколько характеристик предмета. Сделал QVector объектов класса TListElements -QVector<TListElements> leAllElement;
C++ (Qt)
class TListElements
{
public:
QString sName;//Название товара
QString sGUIDParent;//GUID родителя
QString sGUID;//GUID
QString sCount;//Количество
TListElements();
};
C++ (Qt)
while (i < handler1.leAllElement.count())
{
//Если GUID родителя все нули,
if (handler1.leAllElement.at(i).sGUIDParent == "00000000-0000-0000-0000-000000000000")
{
// slCurrentGUIDs.append(handler1.leAllElement.at(i).sGUID);
sTemp = handler1.leAllElement.at(i).sGUID;
if (slCurrentGUIDs.indexOf(sTemp, 0) == -1)
{
slCurrentGUIDs.append(sTemp);
items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(handler1.leAllElement.at(i).sName)));
items2.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(handler1.leAllElement.at(i).sGUID)));
//После того как элемент добавлен в QTreeWidget он удаляется из списка
handler1.leAllElement.remove(i);
i = -1;
}
}
i++;
}
//это означает, что элемент-родитель
ui->treeWidget->addTopLevelItems(items);
handler1.twTemp->addTopLevelItems(items2);
slHistoryGUIDs.append(slCurrentGUIDs);
QModelIndex miTemp;
slCurrentGUIDs.clear();
i = 0;
int j = 0;
int k = 0;
//miTemp.sibling(0,0);
ui->treeWidget->setCurrentIndex(ui->treeWidget->model()->index(0,0));
while(j < ui->treeWidget->topLevelItemCount())
{
i = 0;
ui->treeWidget->setCurrentIndex(ui->treeWidget->model()->index(j,0));
handler1.twTemp->setCurrentIndex(ui->treeWidget->model()->index(j,0));
while (i < handler1.leAllElement.count())
{
k = 0;
slCurrentGUIDs.clear();
while(k < ui->treeWidget->currentItem()->childCount())
{
//Если родительский GUID потомка == текущему GUID, то он добавляется как потомок выбранному элементу
if (handler1.leAllElement.at(i).sGUIDParent == handler1.twTemp->currentItem()->child(k)->text(ui->treeWidget->currentIndex().column()))
{
sTemp = handler1.leAllElement.at(i).sGUID;
//Нужно, чтобы GUID не повторялся
if (slCurrentGUIDs.indexOf(sTemp, 0) == -1)
{
slCurrentGUIDs.append(sTemp);
if (!handler1.leAllElement.at(i).sName.isEmpty()) items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(handler1.leAllElement.at(i).sName)));
if (!handler1.leAllElement.at(i).sGUID.isEmpty()) items2.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(handler1.leAllElement.at(i).sGUID)));
//После того как элемент добавлен в QTreeWidget он удаляется из списка
handler1.leAllElement.remove(i);
}
}
k++;
}
i++;
}
ui->treeWidget->currentItem()->addChildren(items);
handler1.twTemp->currentItem()->addChildren(items2);
//miTemp.sibling(j,0);
//ui->treeWidget->setCurrentIndex(miTemp);
j++;
}
Задача сделать дерево из элементов с большой вложенностью до 10-15 потомков, в соответствии с условием принадлежности к определённому родителю. Если GUID родителя все нули, это означает, что элемент-родитель. Если родительский GUID потомка == текущему GUID, то он добавляется как потомок выбранному элементу или что-то подобное.
Понял, что заполнять нужно последовательно, начиная с toplevel, но запутался конкретно, код можно не смотреть, а направить в нужную сторону. Может лучше модель использовать + QTreeView?
Благодарю за ответы!