QDomDocument docInstall;
docInstall = setContent("xml file");
QDomElement root = docInstall.documentElement();
QDomElement child = root.firstChildElement("component");
while (!child.isNull()) {
QTreeWidgetItem * itemComponent = pSelectTypePage->wInstall->topLevelItem(i);
if (itemComponent->checkState(0) == Qt::Checked) // Это условие, если выбран компонент для установки в QTreeWidget
{
parseElement(child, installDir);
// Если сюда добавить что-то типа
otherEment.appendChild(child);
// То он читает первый элемент, а последующие пропадают. Из-за чего это происходит?
}
child = child.nextSiblingElement("component");
}
Вопрос в камментариях кода.
В твоем коде обработается только один child, так как он теперь последний "ребенок" у otherEment и child.nextSiblingElement("component") возвращает NULL.
Вот вариант:
QDomDocument docInstall;
docInstall = setContent("xml file");
QDomElement child = docInstall.firstChildElement("component"); // в твоем коде была лишняя переменная root
while (!child.isNull()) {
QTreeWidgetItem * itemComponent = pSelectTypePage->wInstall->topLevelItem(i);
if (itemComponent->checkState(0) == Qt::Checked) // Это условие, если выбран компонент для установки в QTreeWidget
{
parseElement(child, installDir);
//ф-ция должна быть обьявлена как parseElement(const QDomElement &, <вторая переменная>), во избежании изменения child
otherEment.appendChild(child.cloneNode(true)); //Добавляем глубокую копию child к OtherEment. Если поставить false то детей не клонирует
}
child = child.nextSiblingElement("component");
}
должно работать