Russian Qt Forum
Ноябрь 25, 2024, 09:36
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Хранение иерархических даных в моделях-наследниках QAbstractItemModel
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Хранение иерархических даных в моделях-наследниках QAbstractItemModel (Прочитано 12665 раз)
Karl-Philipp
Гость
Хранение иерархических даных в моделях-наследниках QAbstractItemModel
«
:
Июль 24, 2008, 16:38 »
Всем привет!
В примере Simple Tree Model данные хранятся в списках, а в Simple Dom Model cчитываются через QDomDocument. Есть ли еще какие-то варианты хранения иерархических данных в моделях, наследующих QAbstractItemModel?
Как по-Вашему, какой вариант лучше использовать для хранения иерархических данных в моделях наследниках QAbstractItemModel, считываемых из xml документов с количеством строк от 1000 до 1000000?
Записан
EhTemka
Гость
Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
«
Ответ #1 :
Июль 24, 2008, 18:47 »
Я использую QStandardItemModel (для отобрвдения QTreeView). Можно использовать QTreeWidget и для хранения и для отображения.
НЕ знаю как насчет 1000000... Можно реализовать подгрузку данных "по надобности". При работе з базой например я реализую такой механизм (для ускорения): Подгружаю данные(делаю запрос и формироване) нижнего уровня иерархии только если пользователь их запросил, то биш нажал на плюсик в дереве. Как в случаи с xml документов не знаю насколько это будет оправдано...
Записан
spirit
Гость
Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
«
Ответ #2 :
Июль 24, 2008, 18:50 »
можете глянуть модель используемую в QTreeWidget, но ее нужно допиливать в любом случае.
но в качестве примера она неплохая.
Записан
Karl-Philipp
Гость
Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
«
Ответ #3 :
Июль 24, 2008, 19:29 »
Цитата: EhTemka от Июль 24, 2008, 18:47
Я использую QStandardItemModel (для отобрвдения QTreeView). Можно использовать QTreeWidget и для хранения и для отображения.
НЕ знаю как насчет 1000000... Можно реализовать подгрузку данных "по надобности". При работе з базой например я реализую такой механизм (для ускорения): Подгружаю данные(делаю запрос и формироване) нижнего уровня иерархии только если пользователь их запросил, то биш нажал на плюсик в дереве. Как в случаи с xml документов не знаю насколько это будет оправдано...
Уровней иерархии где-то до 10, а вот для работы нужен будет самый нижний уровень, то есть подгружать придется все данные сразу.
Цитата: spirit от Июль 24, 2008, 18:50
можете глянуть модель используемую в QTreeWidget, но ее нужно допиливать в любом случае.
но в качестве примера она неплохая.
забыл написать, что модель будет устанавливаться в разные вьюхи, поэтому и хочу наследоваться от QAbstractItemModel, а у QTreeWidget своя модель.
Записан
spirit
Гость
Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
«
Ответ #4 :
Июль 24, 2008, 19:37 »
она наследуются от QAbstractItemModel.
Код:
class QTreeModel : public QAbstractItemModel
см. <QTDIR>\src\gui\itemviews\qtreewidget_p.h
Записан
Tonal
Гость
Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
«
Ответ #5 :
Июль 25, 2008, 07:25 »
Ежели данных действительно много лучше свою модель делать наследуясь от QAbstractItemModel.
Сильно экономичнее будет и по памяти и по скорости.
Записан
Karl-Philipp
Гость
Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
«
Ответ #6 :
Июль 25, 2008, 10:06 »
Цитата: Tonal от Июль 25, 2008, 07:25
Ежели данных действительно много лучше свою модель делать наследуясь от QAbstractItemModel.
Сильно экономичнее будет и по памяти и по скорости.
В среднем количество элементов в модели должно составлять около 600000 штук. Элементы модели будут только создаваться из данных xml файла. После преобразований данные будут записываться в xml с некоторыми изменениями. Основная работа (манипуляции с элементами) будет проводиться с помощью элементов последнего уровня иерархии, которые представлены списками.
Всем спасибо за обсуждение
Буду наследоваться от QAbstractItemModel
Записан
Karl-Philipp
Гость
simple DOM Model VS simple Tree Model (скорость чтения/записи данных)
«
Ответ #7 :
Август 29, 2008, 10:23 »
В Qt есть два примера:
Simple DOM model example & Simple Tree Model Example.
Если данные примеры доработать так, чтобы они считывали и записывали (сохраняли данные) из(в) xml файл, то какой из примеров будет работать (сохранять/читать) быстрее, если в файле около 600000 тегов?
Все элементы xml файла должны считываться (записываться) в(из) модель(и) за один раз.
Записан
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
«
Ответ #8 :
Август 29, 2008, 14:40 »
Цитата: Tonal от Июль 25, 2008, 07:25
Ежели данных действительно много лучше свою модель делать наследуясь от QAbstractItemModel.
Сильно экономичнее будет и по памяти и по скорости.
+100
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ритт
Гость
Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
«
Ответ #9 :
Август 29, 2008, 15:03 »
скорми свой файл обоим примерам, замеряй скорость чтения/записи для каждого и сравни результаты
дом будет очень прожорлив к ресурсам. с другой стороны, 600 000 тэгов - это не так и много - нужно тестировать
думаю, в твоём случае лучше использовать стримридер
Записан
Karl-Philipp
Гость
Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
«
Ответ #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 кб оперативки.
Это нормально?
Записан
ритт
Гость
Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
«
Ответ #11 :
Октябрь 02, 2008, 19:17 »
как-то путанно у тебя.
что такое "первый пример" и "второй пример"? сделал бы лучше табличку сравнений вида Dom | XmlRaw => чтение, запись, навигация, память..
Записан
Karl-Philipp
Гость
Re: Хранение иерархических даных в моделях-н&
«
Ответ #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
Сообщений: 2901
Re: Хранение иерархических даных в моделях-н&
«
Ответ #13 :
Октябрь 02, 2008, 20:22 »
Цитата: terlan от Октябрь 02, 2008, 20:07
Уточните, пожалуйста, то, что модель гребет 200000 Мб для размещения данных, это не многовато?
200000 Мб или 200000 Кб?
В любом случае это очень-очень дохрена
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Karl-Philipp
Гость
Re: Хранение иерархических даных в моделях-н&
«
Ответ #14 :
Октябрь 02, 2008, 20:27 »
исправился, там конечно же 200 Мб, а какой же выход?
Базы использовать?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...