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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопроc по XML и QTreeWidget  (Прочитано 7087 раз)
pupapum
Гость
« : Март 03, 2008, 14:08 »

Подскажите, пожалуйста, можно ли, и если можно, то как, подгрузить в QTreeWidget все данные из XML и выгрузить?
« Последнее редактирование: Март 03, 2008, 14:17 от pupapum » Записан
Karl-Philipp
Гость
« Ответ #1 : Март 03, 2008, 14:47 »

читаем из xml:


Код:
QDomElement element;
QTreeWidget treeWidget;

//берем element из xml
...

if( element.tagName() == "tree element" )
{
QTreeWidgetItem *widgetItem = new QTreeWidgetItem(treeWidget);
widgetItem->setText(0, tr("tree element"));
}
...

пишем в xml:

Код:
QDomDocument domDocument;

if( treeWidget.itemAt(n,m)->text(m) == "tree element" )
{
QDomElement element = domDocument.createElement("tree element");
domDocument.documentElement().appendChild(element);
}
Записан
pupapum
Гость
« Ответ #2 : Март 03, 2008, 14:59 »

я имел ввиду, что xml файл заполнен в виде дерева
мне нужно все эти данные загрузть в QTreeWidget
Записан
Karl-Philipp
Гость
« Ответ #3 : Март 03, 2008, 15:36 »

Предлагается создать метод(открывающий xml), который бы вызывал рекурсивную функцию. Данная функция считывает xml элемент и проверяет, есть ли у передаваемого ей элемента дети Улыбающийся?
Кроме того, в рекурсивную функцию предлагается передавать родителя (QTreeWidgetItem), для того, чтобы было к чему прикреплять дочерний айтем.

Код:
void readXML()
{
QDomDocument domDocument;
//считываем xml в domDocument
...

QDomElement root = domDocument->documentElement();

if (root.hasChildNodes())
{
child = root.firstChildElement();
QTreeWidgetItem *parentItem = NULL;

f(child, parentItem);
}
}



void f(const QDomElement &child, QTreeWidgetItem &parentItem)
{
QTreeWidgetItem *widgetItem;
QDomElement tempElem;

if ( child.tagName() == "tree element" )
{
QTreeWidgetItem *widgetItem = new QTreeWidgetItem(parentItem);
widgetItem->setText(0, tr("tree element"));
}
else if (child.tagName() == "...")
{
...
}

//а далее рекурсия

if (child.hasChildNodes())
{
tempElem = child.firstChildElement();
f( tempElem, widgetItem );
}

tempElem = child.nextSiblingElement();
if ( !tempElem.isNull() ) f( tempElem, parentItem );
}

возможно где-то помарки, но так видится решение поставленной задачи
« Последнее редактирование: Март 03, 2008, 15:44 от terlan » Записан
Вячеслав
Гость
« Ответ #4 : Март 03, 2008, 15:47 »

Хм Подмигивающий examples\xml\dombookmarks Ы?
Записан
Karl-Philipp
Гость
« Ответ #5 : Март 03, 2008, 16:07 »

Хм Подмигивающий examples\xml\dombookmarks Ы?
точно Улыбающийся Забыл, что идею когда-то оттуда брал, вот только мудреный там пример как по мне. Неужели в предложенном мною варианте не проще?
Записан
iukash
Гость
« Ответ #6 : Март 14, 2011, 23:28 »

Цитировать
//считываем xml в domDocument
А как это сделать?
Записан
Karl-Philipp
Гость
« Ответ #7 : Март 15, 2011, 00:40 »

Цитировать
//считываем xml в domDocument
А как это сделать?
Пример Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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