Russian Qt Forum

Qt => Model-View (MV) => Тема начата: UVV от Декабрь 18, 2009, 11:04



Название: QAbstractItemModel, QTreeView и много данных
Отправлено: UVV от Декабрь 18, 2009, 11:04
Привет.
Есть модель и treeview.
Когда я пытаюсь раскрыть элемент в treeview, который под собой имеет много данных, то приложение зависает минуты на 2-3 со 100%-ой загрузкой процессора, а только потом показывает данные.
Что можно сделать в этой ситуации?
Пересмотреть алгоритм получения данных в модели, разбить это на потоки или что-то ещё?


Название: Re: QAbstractItemModel, QTreeView и много данных
Отправлено: Vass от Декабрь 18, 2009, 14:58
А данные в модель по раскрытию подгружаются? или модель уже полностью "собрана"?


Название: Re: QAbstractItemModel, QTreeView и много данных
Отправлено: UVV от Декабрь 18, 2009, 17:23
По раскрытию


Название: Re: QAbstractItemModel, QTreeView и много данных
Отправлено: Vass от Декабрь 18, 2009, 18:04
Ну тогда очевидно, что время тратиться на извлечение данных и на заполнение модели. У меня была такая беда с многофайловыми папками и стандартными файл и дир моделями, пришлось писать свою, удалось добиться более менее приличной скорости, но в любом случае надо оптимизировать алгоритм выбора данных, можно попробовать вынести в отдельный тред, это как минимум должно избавить от "подвисания" GUI на время создания модели.

Еще вопрос, неужели в одной папке вашего дерева СТОЛЬКО элементов, у меня содержимое реального каталога (т.е. это обращение к диску) с 15-20к файлами занимает 8-15 секунд.


Название: Re: QAbstractItemModel, QTreeView и много данных
Отправлено: UVV от Декабрь 18, 2009, 18:25
1. Насчёт вынести в отдельный тред - в принципе так и собирался. Оптимизировать алгоритм вывода - тут надо будет подумать ;)
2. Сейчас проверил: ~24000 элемента - около 40 секунд. Это не дисковая операция. Файл с этими данными занимает чуть больше 2 мегабайт.


Название: Re: QAbstractItemModel, QTreeView и много данных
Отправлено: Vass от Декабрь 18, 2009, 19:13
Может покажете код модели?


Название: Re: QAbstractItemModel, QTreeView и много данных
Отправлено: BlackTass от Декабрь 18, 2009, 19:18
Еще можно прогнать профайлером и посмотреть что же так много ест.


Название: Re: QAbstractItemModel, QTreeView и много данных
Отправлено: GNU Dimarik от Декабрь 20, 2009, 03:08
имхо нужно инициализировать модель заранее.Если данных много разберись с
bool QAbstractItemModel::canFetchMore ( const QModelIndex & parent ) const
и
void QAbstractItemModel::fetchMore ( const QModelIndex & parent )
где то в Qt demo был пример вроде,не помню,но кажется я там научился.Посмотри у себя


Название: Re: QAbstractItemModel, QTreeView и много данных
Отправлено: UVV от Декабрь 23, 2009, 05:08
имхо нужно инициализировать модель заранее.Если данных много разберись с
bool QAbstractItemModel::canFetchMore ( const QModelIndex & parent ) const
и
void QAbstractItemModel::fetchMore ( const QModelIndex & parent )
где то в Qt demo был пример вроде,не помню,но кажется я там научился.Посмотри у себя

Да, спасибо, это направление устраивает больше всего.


Название: Re: QAbstractItemModel, QTreeView и много данных
Отправлено: UVV от Декабрь 23, 2009, 05:09
Может покажете код модели?

Во-первых, он большой. Во-вторых, лучше не надо ;) По лицензионным причинам.