QFileSystemModel и полное сканирование папок |
Здравствуйте, гость ( Вход | Регистрация )
QFileSystemModel и полное сканирование папок |
dmsovetov |
15.12.2015, 21:37
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 4.12.2015 Пользователь №: 4495 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день.
Хотелось бы узнать, как можно заставить QFileSystemModel просканировать все папки начиная от корневого индекса модели. Я пробовал дергать fetchMore, когда получаю сигнал directoryLoaded, но после этого там что-то ломается - перемещение файла просто валится на асерте внутри модели. Вот так я пробовал сканировать:
P.S. да, знаю что там специально сделано, чтоб грузилось по требованию, но у меня специфическая задача |
|
|
Алексей1153 |
16.12.2015, 9:10
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
dmsovetov, что в ассерте то пишется ?
и сильно смущает такой подход
думаю, правильнее так - а вдруг количество строк поменяется ?
ну и полезно проверить
- казалось бы, методы модели должны правильно реагировать на невалидные индексы. Ан нет, скажем, табличные модели прекрасно падают, если в некоторые методы передать невалидный индекс . Ещё мне кажется, что нужен будет рекурсивный скан вглубь всего дерева. А сейчас только по первому уровню пробегаешь |
|
|
dmsovetov |
16.12.2015, 12:13
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 4.12.2015 Пользователь №: 4495 Спасибо сказали: 0 раз(а) Репутация: 0 |
думаю, правильнее так - а вдруг количество строк поменяется ? ... ну и полезно проверить Попробовал. Не помогло Ещё мне кажется, что нужен будет рекурсивный скан вглубь всего дерева. А сейчас только по первому уровню пробегаешь Сигнал directoryLoaded будет вызываться для всех папок, которые я подгрузил через fetchMore. Оно все грузит как надо, проблема в том, что drag'n'drop потом валится вот на таком асерте PS прикрепляю минимальный проект к посту.
Прикрепленные файлы
|
|
|
Алексей1153 |
16.12.2015, 12:56
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
dmsovetov,
ассерт намекает, что ASSERT: "!fileName.isEmpty()" in file dialogs\qfilesystemmodel.cpp, line 1857 Кстати, даже просто переименовываю файл вне программы, моделька подхватывает и падает с таким же ассертом )) Раскрывающийся текст А как у тебя компилятор такое позволил QTreeView::EditTrigger::EditKeyPressed , тоже так хочу у меня только так QTreeView::EditKeyPressed позволяет мне сдаётся, что вот тут что-то не так connect(this, SIGNAL(directoryLoaded(const QString &)), this, SLOT(directoryLoaded(const QString &))); Этот косячный коннект убираю - ассерт пропадает. Разбирайся, что ты имел в виду в этом коннекте |
|
|
dmsovetov |
16.12.2015, 13:31
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 4.12.2015 Пользователь №: 4495 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата мне сдаётся, что вот тут что-то не так Та не, то у меня так слот называется, его можно по-другому называть - все равно асерт будет. Цитата Этот косячный коннект убираю - ассерт пропадает. Разбирайся, что ты имел в виду в этом коннекте Ну конечно, он ведь больше не делает fetchMore, вот и ассерта нету Цитата А как у тебя компилятор такое позволил У меня Visual Studio 2013 Community. Студия много чего неправильного позволяет, а потом оно под всякими GCC/LLVM под мак/иос/андроид не собирается, так что лучше с таким не баловаться ) |
|
|
ViGOur |
16.12.2015, 13:37
Сообщение
#6
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Думается мне, что у тебя программа уходит в бесконечную рекурсию, от того и accert
|
|
|
Алексей1153 |
16.12.2015, 13:46
Сообщение
#7
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
dmsovetov, не знаю, как насчёт одинаковых имён, я к своим слотам и сигналам приписываю префиксы slot_ и signal_ всегда, чтобы не нарываться на одинаковые имена ) Так, на всякий случай. Здесь вроде всё правильно компилятор понимает
ещё момент. Я добавил проверку
и вот такой невалидный индекс ты передаёшь в rowCount, после чего ассерт показывается Причину невалидности не знаю ViGOur, рекурсии нету, поскольку указаны SLOT и SIGNAL , поэтому препроцессор вроде понимает их как разные сигнатуры |
|
|
ViGOur |
16.12.2015, 13:55
Сообщение
#8
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
|
|
|
dmsovetov |
16.12.2015, 14:08
Сообщение
#9
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 4.12.2015 Пользователь №: 4495 Спасибо сказали: 0 раз(а) Репутация: 0 |
и вот такой невалидный индекс ты передаёшь в rowCount, после чего ассерт показывается Обернул в проверку - все равно ассерт срабатывает Может тут с потоками что-то не то? Ведь QFileSystemModel вобще в другом потоке сканирует. Кажется понял. Надо вот так цикл поменять:
|
|
|
Алексей1153 |
16.12.2015, 14:23
Сообщение
#10
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
ага, я добавил и посмотрел - тоже про файлы подумал - но ты меня опередил ))
|
|
|
Текстовая версия | Сейчас: 22.11.2024, 8:20 |