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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Хранение иерархических даных в моделях-наследниках QAbstractItemModel  (Прочитано 12661 раз)
Karl-Philipp
Гость
« : Июль 24, 2008, 16:38 »

Всем привет!

В примере Simple Tree Model данные хранятся в списках, а в Simple Dom Model cчитываются через QDomDocument. Есть ли еще какие-то варианты хранения иерархических данных в моделях, наследующих QAbstractItemModel?

Как по-Вашему, какой вариант лучше использовать для хранения иерархических данных в моделях наследниках QAbstractItemModel, считываемых из xml документов с количеством строк от 1000 до 1000000?
Записан
EhTemka
Гость
« Ответ #1 : Июль 24, 2008, 18:47 »

Я использую QStandardItemModel (для отобрвдения QTreeView). Можно использовать QTreeWidget и для хранения и для отображения.
НЕ знаю как насчет 1000000... Можно реализовать подгрузку данных "по надобности". При работе з базой например я реализую такой механизм (для ускорения): Подгружаю данные(делаю запрос и формироване) нижнего уровня иерархии только если пользователь их запросил, то биш нажал на плюсик в дереве. Как в случаи с xml документов не знаю насколько это будет оправдано...
Записан
spirit
Гость
« Ответ #2 : Июль 24, 2008, 18:50 »

можете глянуть модель используемую в QTreeWidget, но ее нужно допиливать в любом случае.
но в качестве примера она неплохая.
Записан
Karl-Philipp
Гость
« Ответ #3 : Июль 24, 2008, 19:29 »

Я использую QStandardItemModel (для отобрвдения QTreeView). Можно использовать QTreeWidget и для хранения и для отображения.
НЕ знаю как насчет 1000000... Можно реализовать подгрузку данных "по надобности". При работе з базой например я реализую такой механизм (для ускорения): Подгружаю данные(делаю запрос и формироване) нижнего уровня иерархии только если пользователь их запросил, то биш нажал на плюсик в дереве. Как в случаи с xml документов не знаю насколько это будет оправдано...

Уровней иерархии где-то до 10, а вот для работы нужен будет самый нижний уровень, то есть подгружать придется все данные сразу.

можете глянуть модель используемую в QTreeWidget, но ее нужно допиливать в любом случае.
но в качестве примера она неплохая.

забыл написать, что модель будет устанавливаться в разные вьюхи, поэтому и хочу наследоваться от QAbstractItemModel, а у QTreeWidget своя модель.
Записан
spirit
Гость
« Ответ #4 : Июль 24, 2008, 19:37 »

она наследуются от QAbstractItemModel.
Код:
class QTreeModel : public QAbstractItemModel
см. <QTDIR>\src\gui\itemviews\qtreewidget_p.h
Записан
Tonal
Гость
« Ответ #5 : Июль 25, 2008, 07:25 »

Ежели данных действительно много лучше свою модель делать наследуясь от QAbstractItemModel.
Сильно экономичнее будет и по памяти и по скорости.
Записан
Karl-Philipp
Гость
« Ответ #6 : Июль 25, 2008, 10:06 »

Ежели данных действительно много лучше свою модель делать наследуясь от QAbstractItemModel.
Сильно экономичнее будет и по памяти и по скорости.
В среднем количество элементов в модели должно составлять около 600000 штук. Элементы модели будут только создаваться из данных xml файла. После преобразований данные будут записываться в xml с некоторыми изменениями. Основная работа (манипуляции с элементами) будет проводиться с помощью элементов последнего уровня иерархии, которые представлены списками.

Всем спасибо за обсуждение
Буду наследоваться от QAbstractItemModel Улыбающийся
Записан
Karl-Philipp
Гость
« Ответ #7 : Август 29, 2008, 10:23 »

В Qt есть два примера:
Simple DOM model example & Simple Tree Model Example.

Если данные примеры доработать так, чтобы они считывали и записывали (сохраняли данные) из(в) xml файл, то какой из примеров будет работать (сохранять/читать) быстрее, если в файле около 600000 тегов?

Все элементы xml файла должны считываться (записываться) в(из) модель(и) за один раз.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Август 29, 2008, 14:40 »

Ежели данных действительно много лучше свою модель делать наследуясь от QAbstractItemModel.
Сильно экономичнее будет и по памяти и по скорости.

+100
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ритт
Гость
« Ответ #9 : Август 29, 2008, 15:03 »

скорми свой файл обоим примерам, замеряй скорость чтения/записи для каждого и сравни результаты Улыбающийся
дом будет очень прожорлив к ресурсам. с другой стороны, 600 000 тэгов - это не так и много - нужно тестировать
думаю, в твоём случае лучше использовать стримридер
Записан
Karl-Philipp
Гость
« Ответ #10 : Октябрь 02, 2008, 18:58 »

Проверил на скорость загрузки примеры Editable Tree Model (с возможностью загружать xml документ) и Simple DOM Model. Первый выигрывает по всем параметрам - время загрузки в модель файла с 1000000 строками тегов составило 25 сек, в DomDocument файл подгружался 1.20 сек, при этом последний забирал в пределах 500000 кБ оперативки :о
Перемещаться по дереву практически без тормозов можно только в первом примере, во втором - почти невозможно - очень сильно тормозит.

Celeron 1.1 512 ОЗУ.

Вместе с тем программа на основе Editable Tree Model отхватила 200000 кб оперативки.
Это нормально?
Записан
ритт
Гость
« Ответ #11 : Октябрь 02, 2008, 19:17 »

как-то путанно у тебя.
что такое "первый пример" и "второй пример"? сделал бы лучше табличку сравнений вида Dom | XmlRaw => чтение, запись, навигация, память..
Записан
Karl-Philipp
Гость
« Ответ #12 : Октябрь 02, 2008, 20:07 »

                              Считывание xml файла (1000000 строк)с помощью

                                    Simple editable model +|     simple DOM model
                                      QXmlStreamReader    |  
скорость считывания(с)                25               |             80
Перемещение по дереву         без тормозов       |   очень тормозит
Потребность в памяти(МБ)            200              |            500 

Выбрал вариант модели на основ Simple editable model + QXmlStreamReader Улыбающийся

Уточните, пожалуйста, то, что модель гребет 200 Мб для размещения данных, это не многовато?
« Последнее редактирование: Октябрь 02, 2008, 20:26 от terlan » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #13 : Октябрь 02, 2008, 20:22 »

Уточните, пожалуйста, то, что модель гребет 200000 Мб для размещения данных, это не многовато?

200000 Мб или 200000 Кб?


В любом случае это очень-очень дохрена
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Karl-Philipp
Гость
« Ответ #14 : Октябрь 02, 2008, 20:27 »

исправился, там конечно же 200 Мб, а какой же выход?
Базы использовать?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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