Код наполнения древовидной модели может выглядеть примерно так:
// Заполнение модели данными из DOM-элементов <Element id="..." name="..."/>
// Эти элементы могут быть вложены друг в друга
void ChkTreeModel::setupModelData(const QDomElement &domElement)
{
qDebug() << Q_FUNC_INFO << "Start load tree model data...";
QList<QVariant> parameters;
parameters << "Id" << "Name"; // Заголоки теблицы
m_rootItem->setData(parameters); // Корневой элемент (его данные - это заголовки таблицы)
this->setupModelDataRecurse(domElement, m_rootItem);
}
void ChkTreeModel::setupModelDataRecurse(const QDomElement &domElement, ChkTreeItem *item)
{
if (!domElement.isNull() && domElement.hasChildNodes())
{
QDomElement childElement = domElement.firstChildElement("Element");
for (; !childElement.isNull(); childElement = childElement.nextSiblingElement("Element"))
{
const QString &nodeId = childElement.attribute("id");
const QString &nodeName = childElement.attribute("name");
// qDebug() << Q_FUNC_INFO << "Create tree item " << nodeId << nodeName;
QList<QVariant> parameters;
parameters << nodeId << nodeName;
ChkTreeItem *createItem=new ChkTreeItem(parameters, item);
item->appendChild( createItem );
// Рекурсивный ввызов
this->setupModelDataRecurse(childElement, createItem);
}
}
}