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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QAbstractItemModel, QTreeView и много данных  (Прочитано 6052 раз)
UVV
Гость
« : Декабрь 18, 2009, 11:04 »

Привет.
Есть модель и treeview.
Когда я пытаюсь раскрыть элемент в treeview, который под собой имеет много данных, то приложение зависает минуты на 2-3 со 100%-ой загрузкой процессора, а только потом показывает данные.
Что можно сделать в этой ситуации?
Пересмотреть алгоритм получения данных в модели, разбить это на потоки или что-то ещё?
Записан
Vass
Гость
« Ответ #1 : Декабрь 18, 2009, 14:58 »

А данные в модель по раскрытию подгружаются? или модель уже полностью "собрана"?
Записан
UVV
Гость
« Ответ #2 : Декабрь 18, 2009, 17:23 »

По раскрытию
Записан
Vass
Гость
« Ответ #3 : Декабрь 18, 2009, 18:04 »

Ну тогда очевидно, что время тратиться на извлечение данных и на заполнение модели. У меня была такая беда с многофайловыми папками и стандартными файл и дир моделями, пришлось писать свою, удалось добиться более менее приличной скорости, но в любом случае надо оптимизировать алгоритм выбора данных, можно попробовать вынести в отдельный тред, это как минимум должно избавить от "подвисания" GUI на время создания модели.

Еще вопрос, неужели в одной папке вашего дерева СТОЛЬКО элементов, у меня содержимое реального каталога (т.е. это обращение к диску) с 15-20к файлами занимает 8-15 секунд.
Записан
UVV
Гость
« Ответ #4 : Декабрь 18, 2009, 18:25 »

1. Насчёт вынести в отдельный тред - в принципе так и собирался. Оптимизировать алгоритм вывода - тут надо будет подумать Подмигивающий
2. Сейчас проверил: ~24000 элемента - около 40 секунд. Это не дисковая операция. Файл с этими данными занимает чуть больше 2 мегабайт.
Записан
Vass
Гость
« Ответ #5 : Декабрь 18, 2009, 19:13 »

Может покажете код модели?
Записан
BlackTass
Гость
« Ответ #6 : Декабрь 18, 2009, 19:18 »

Еще можно прогнать профайлером и посмотреть что же так много ест.
Записан
GNU Dimarik
Гость
« Ответ #7 : Декабрь 20, 2009, 03:08 »

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

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

Да, спасибо, это направление устраивает больше всего.
Записан
UVV
Гость
« Ответ #9 : Декабрь 23, 2009, 05:09 »

Может покажете код модели?

Во-первых, он большой. Во-вторых, лучше не надо Подмигивающий По лицензионным причинам.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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