Название: Разьясните, почему так происходит при чтении.
Отправлено: Flake от Март 05, 2008, 16:07
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"); }
Вопрос в камментариях кода.
Название: Re: Разьясните, почему так происходит при чтении.
Отправлено: vaprele07 от Март 06, 2008, 03:33
сделай cloneNode
Название: Re: Разьясните, почему так происходит при чтении.
Отправлено: Flake от Март 06, 2008, 10:52
А что именно надо клонировать? Пробовал весь документ как тут http://prog.org.ru/forum/index.php/topic,6399.0.html (http://prog.org.ru/forum/index.php/topic,6399.0.html) QDomDocument source; QDomDocument target = source.cloneNode(true); Но ругается: cannot convert from 'QDomNode' to 'QDomDocument'.
Название: Re: Разьясните, почему так происходит при чтении.
Отправлено: GreenGo от Январь 29, 2009, 09:31
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"); }
должно работать
|