Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсчёт времени построения дерева каталогов. Отображать прогресс построения дерева. 
V
    Опции темы
NoviceF
Дата 24.7.2015, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: 2



[QT]

Забыл указать в названии темы, что речь о Qt 5.4.

Товарищи, прошу помощи.

Есть комбобокс, в котором выбирается диск (по нему отдельные вопросы, но он худо бедно работает), далее задача состоит в том, что в параллельном потоке "построить" "модель" файловой системы и отобразить её treeview, но при этом ещё нужно отображать прогресс этого процесса. Простроить и модель пишу в кавычках, т.к. подход может быть любым.

Работу с потоками я кое как освоил, но вот понять, как получить прогресс построения дерева стандартными средствами, я не могу.

Я рассматривал два варианта - первый на базе QFileSystemModel. То есть создать модель, задать ей индекс и корневой элемент выбранным диском, подписаться на сигнал directoryLoaded и.. дальше не понятно. Модель подгружает директории по одной, по мере выбора их пользователем, видимо при, помощи fetchMore, но как вмешаться в этот процесс я не вижу. Может такой вариант есть и вы подскажете.

Второй вариант делать свою модель, но пока мне это кажется очень сложным и опять же кажется что есть путь полегче. Может использовать наследование от стандартных моделей, может делать "модель" на базе map или что-то в таком духе. Правда потом не понятно, как заполнять получившимся "деревом" treeview, может использовать другой виджет для отображения дерева..

В общем прошу помочь советом/идеями/ссылками/примерами кода.

Заранее спасибо.

Это сообщение отредактировал(а) NoviceF - 25.7.2015, 20:33
PM MAIL   Вверх
math64
Дата 27.7.2015, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Модель придётся делать настоящую - в Qt иначе нельзя.
При использовании QTreeWidget тоже используется стандартная модель, но она скрыта от пользователя.
Цитата(NoviceF @  24.7.2015,  20:37 Найти цитируемый пост)
Модель подгружает директории по одной, по мере выбора их пользователем, видимо при, помощи fetchMore, но как вмешаться в этот процесс я не вижу

Все "видимо" уйдут, если посмотрите исходники QFileSystemModel. Зачем вмешиваться в этот процесс - смысла не вижу, разве что по умолчанию он будет происходить в основном потоке, а Вам нужно в своём.
Если хотите писать свою модель, исходники QFileSystemModel тоже помогут. Возможно, достаточно написать прокси-модель, использующую QFileSystemModel - подобные примеры идут с Qt, но без использования потоков.

PM   Вверх
NoviceF
Дата 27.7.2015, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: 2



Цитата(math64 @  27.7.2015,  08:25 Найти цитируемый пост)
Возможно, достаточно написать прокси-модель


Хм, вот об этом и не подумал, хотя примеры похожие попадались.

Меня посещали мысли при выборе диска проходит его корень, писать всё в какой-нибудь map (в этом случае понятно как оценить прогресс), но если пользователь пойдёт "в глубь" диска, то при открытии каждой новой папки, нужно будет добавлять её в этот map и поддерживать всё это дерево в адекватном состоянии, что уже напоминает собственно модель.. Видимо придётся разбираться с моделями.. smile


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0617 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.