Название: XML to QTreeWidget
Отправлено: dangreen от Август 27, 2011, 20:30
Есть такой примерчик на делфи, функция парсит xml в TreeView procedure TForm1.XML2Tree(tree: TTreeView; XMLDoc: TXMLDocument); var iNode: TDOMNode; procedure ProcessNode(Node: TDOMNode; TreeNode: TTreeNode); var cNode: TDOMNode; s: string; begin if Node = nil then Exit; // выходим, если достигнут конец документа // добавляем узел в дерево if Node.HasAttributes and (Node.Attributes.Length>0) then s:=Node.Attributes[0].NodeValue else s:=''; TreeNode := tree.Items.AddChild(TreeNode, s); // переходим к дочернему узлу cNode := Node.FirstChild; // проходим по всем дочерним узлам while cNode <> nil do begin ProcessNode(cNode, TreeNode); cNode := cNode.NextSibling; end; end; begin iNode := XMLDoc.DocumentElement.FirstChild; while iNode <> nil do begin ProcessNode(iNode, nil); // Рекурсия iNode := iNode.NextSibling; end; end; я понял как можно реализовать такое же "хождение" по бд на Qt, но я не понял как пихать данные в QTreeWidget , помогите пожалусто, может даже уже есть то что я хочу
Название: Re: XML to QTreeWidget
Отправлено: dangreen от Август 28, 2011, 17:10
void MainWindow::parsToTree() { QDomElement child; QDomElement root = roxinf.documentElement();
if(root.hasChildNodes()){ child = root.firstChildElement(); QTreeWidgetItem *parentItem = NULL; f(child, parentItem); }
}
void MainWindow::f(QDomElement child, QTreeWidgetItem *parentItem) { QDomElement tempElem; if(child.hasChildNodes()) qDebug()<<child.nodeName(); if(child.parentNode().nodeName()=="db"){ QTreeWidgetItem *tmpSecItem = new QTreeWidgetItem(QStringList()<<child.nodeName()); ui->treeWidget->addTopLevelItem(tmpSecItem); f( child.firstChildElement(), ui->treeWidget->topLevelItem(topI++) ); } else if(child.hasChildNodes()){ QTreeWidgetItem *tmpSecItem = new QTreeWidgetItem(QStringList()<<child.nodeName()); parentItem->addChild(tmpSecItem); int index; if(parentItem->childCount()==0)index=0; else index=parentItem->childCount()-1; f( child.firstChildElement(), parentItem->child(index) ); } tempElem = child.nextSiblingElement(); if(!tempElem.isNull())f(tempElem, parentItem); }
|