MyTetra Share
Делитесь знаниями!
Пример загрузки дерева и пробегания подчиненных элементов QDomElement
Время создания: 30.01.2020 12:48
Текстовые метки: qt, QDomElement, заполнение данными, считывание, XML, элемент, рекурсия
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Принципы написания кода
Запись: xintrea/mytetra_syncro/master/base/1580377700u82ygmxct4/text.html на raw.github.com

Код наполнения древовидной модели может выглядеть примерно так:



// Заполнение модели данными из 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);

}

}

}



Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования