Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Подсчёт времени построения дерева каталогов.


Автор: NoviceF 24.7.2015, 20:37
[QT]

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

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

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

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

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

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

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

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

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

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

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


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

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


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)