Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
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
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
dmsovetov, что в ассерте то пишется ?
и сильно смущает такой подход думаю, правильнее так - а вдруг количество строк поменяется ? ну и полезно проверить - казалось бы, методы модели должны правильно реагировать на невалидные индексы. Ан нет, скажем, табличные модели прекрасно падают, если в некоторые методы передать невалидный индекс . Ещё мне кажется, что нужен будет рекурсивный скан вглубь всего дерева. А сейчас только по первому уровню пробегаешь |
|
|
|
|
dmsovetov |
16.12.2015, 12:13
Сообщение
#3
|
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 4.12.2015 Пользователь №: 4495 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(Алексей1153 @ 16.12.2015, 8:10) Link думаю, правильнее так - а вдруг количество строк поменяется ? ... ну и полезно проверить Попробовал. Не помогло Цитата(Алексей1153 @ 16.12.2015, 8:10) Link Ещё мне кажется, что нужен будет рекурсивный скан вглубь всего дерева. А сейчас только по первому уровню пробегаешь Сигнал directoryLoaded будет вызываться для всех папок, которые я подгрузил через fetchMore. Оно все грузит как надо, проблема в том, что drag'n'drop потом валится вот на таком асерте ![]() PS прикрепляю минимальный проект к посту.
Прикрепленные файлы
|
|
|
|
|
Алексей1153 |
16.12.2015, 12:56
Сообщение
#4
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 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
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 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
|
Цитата(Алексей1153 @ 16.12.2015, 13:46) Link ViGOur, рекурсии нету, поскольку указаны SLOT и SIGNAL , поэтому препроцессор вроде понимает их как разные сигнатуры согласен, перепрочел, был невнимателен. |
|
|
|
|
dmsovetov |
16.12.2015, 14:08
Сообщение
#9
|
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 4.12.2015 Пользователь №: 4495 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(Алексей1153 @ 16.12.2015, 12:46) Link и вот такой невалидный индекс ты передаёшь в rowCount, после чего ассерт показывается Обернул в проверку - все равно ассерт срабатывает Может тут с потоками что-то не то? Ведь QFileSystemModel вобще в другом потоке сканирует. Кажется понял. Надо вот так цикл поменять:
|
|
|
|
|
Алексей1153 |
16.12.2015, 14:23
Сообщение
#10
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
ага, я добавил и посмотрел - тоже про файлы подумал - но ты меня опередил ))
|
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 6.12.2025, 9:45 |