Russian Qt Forum
Ноябрь 22, 2024, 21:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Разьясните, почему так происходит при чтении.  (Прочитано 4658 раз)
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");
}

Вопрос в камментариях кода.
Записан
vaprele07
Гость
« Ответ #1 : Март 06, 2008, 03:33 »

сделай cloneNode
Записан
Flake
Гость
« Ответ #2 : Март 06, 2008, 10:52 »

А что именно надо клонировать?

Пробовал весь документ как тут http://prog.org.ru/forum/index.php/topic,6399.0.html

Код:
QDomDocument source;
QDomDocument target = source.cloneNode(true);

Но ругается: cannot convert from 'QDomNode' to 'QDomDocument'.
Записан
GreenGo
Гость
« Ответ #3 : Январь 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");
}

должно работать
« Последнее редактирование: Январь 29, 2009, 09:34 от GreenGo » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.042 секунд. Запросов: 21.