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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: XML to QTreeWidget  (Прочитано 5058 раз)
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 , помогите пожалусто, может даже уже есть то что я хочу
Записан
dangreen
Гость
« Ответ #1 : Август 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);
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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