Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: pupapum от Март 03, 2008, 14:08



Название: Вопроc по XML и QTreeWidget
Отправлено: pupapum от Март 03, 2008, 14:08
Подскажите, пожалуйста, можно ли, и если можно, то как, подгрузить в QTreeWidget все данные из XML и выгрузить?


Название: Re: Вопроc по XML и QTreeWidget
Отправлено: Karl-Philipp от Март 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);
}


Название: Re: Вопроc по XML и QTreeWidget
Отправлено: pupapum от Март 03, 2008, 14:59
я имел ввиду, что xml файл заполнен в виде дерева
мне нужно все эти данные загрузть в QTreeWidget


Название: Re: Вопроc по XML и QTreeWidget
Отправлено: Karl-Philipp от Март 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 );
}

возможно где-то помарки, но так видится решение поставленной задачи


Название: Re: Вопроc по XML и QTreeWidget
Отправлено: Вячеслав от Март 03, 2008, 15:47
Хм ;) examples\xml\dombookmarks Ы?


Название: Re: Вопроc по XML и QTreeWidget
Отправлено: Karl-Philipp от Март 03, 2008, 16:07
Хм ;) examples\xml\dombookmarks Ы?
точно :) Забыл, что идею когда-то оттуда брал, вот только мудреный там пример как по мне. Неужели в предложенном мною варианте не проще?


Название: Re: Вопроc по XML и QTreeWidget
Отправлено: iukash от Март 14, 2011, 23:28
Цитировать
//считываем xml в domDocument
А как это сделать?


Название: Re: Вопроc по XML и QTreeWidget
Отправлено: Karl-Philipp от Март 15, 2011, 00:40
Цитировать
//считываем xml в domDocument
А как это сделать?
Пример (http://doc.qt.nokia.com/4.7.1/xml-dombookmarks.html) :)