Russian Qt Forum

Qt => XML => Тема начата: deMax от Апрель 02, 2015, 13:52



Название: древовидная структура qt5
Отправлено: deMax от Апрель 02, 2015, 13:52
Добрый день, подскажите, пожалуйста, как в qt5 создать дерево такой структуры?

<node name = "факультет">
     <n abbr = "К1" name = "кафедра1">
             <a abbr = "1" name = "предмет1"></a>
             <a abbr = "2" name = "предмет2"></a>
     </n>
     <n abbr = "К2" name = "кафедра2">
             <a abbr = "3" name = "предмет3"></a>
             <a abbr = "4" name = "предмет4"></a>
     </n>
</node>


Название: Re: древовидная структура qt5
Отправлено: Пантер от Апрель 02, 2015, 13:54
При помощи QXmlStreamWriter?


Название: Re: древовидная структура qt5
Отправлено: deMax от Апрель 02, 2015, 14:07
Любой функции, xml только начал смотреть.
Нужно из xml файла загрузить в структуру. Вложенность xml произвольная.
Код:
struct Node { 
QString name;
QVector<Node> child;
}

p.s. Делал через QDomDocument, но QDomElement::firstChildElement("n") возвращает всех детей данного элемента, а не прямых.
рекурсивно запускал для QDomElement
Код:
void readChild(QDomElement element, Node* node) 
{
    QDomNodeList e = element.QDomElement::firstChildElement("n");
    for(int i = 0; i < e.count(); i++)
    {
        Node n;
        readChild(element.at(i).toElement(), &n);
        node->child << n;
    }
}


Название: Re: древовидная структура qt5
Отправлено: kai666_73 от Апрель 02, 2015, 17:58
Так будет правильнее

Код
C++ (Qt)
void readChild(QDomElement element, Node* node)
{
   QDomElement e = element.firstChildElement("n");
   while ( !e.isNull() ) {
       Node n;
       node->child << n;
       readChild(e, &n);
       e = e.nextSiblingElement("n");
   }
}
 

но столько всего на стеке, да еще и с рекурсией  :o. Переделайте с использованием указателей (как минимум, аргументы рекурсивной функции ) и в путь...


Название: Re: древовидная структура qt5
Отправлено: sergek от Апрель 04, 2015, 11:31
Нужно из xml файла загрузить в структуру. Вложенность xml произвольная.
Я бы сделал на основе QXmlSimpleReader, QXmlDefaultHandler.