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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: древовидная структура qt5  (Прочитано 7941 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Апрель 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>
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 02, 2015, 13:54 »

При помощи QXmlStreamWriter?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #2 : Апрель 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;
    }
}
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #3 : Апрель 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");
   }
}
 

но столько всего на стеке, да еще и с рекурсией  Шокированный. Переделайте с использованием указателей (как минимум, аргументы рекурсивной функции ) и в путь...
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #4 : Апрель 04, 2015, 11:31 »

Нужно из xml файла загрузить в структуру. Вложенность xml произвольная.
Я бы сделал на основе QXmlSimpleReader, QXmlDefaultHandler.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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