![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
dmsovetov |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 4.12.2015 Пользователь №: 4495 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Добрый день.
Хотелось бы узнать, как можно заставить QFileSystemModel просканировать все папки начиная от корневого индекса модели. Я пробовал дергать fetchMore, когда получаю сигнал directoryLoaded, но после этого там что-то ломается - перемещение файла просто валится на асерте внутри модели. Вот так я пробовал сканировать:
P.S. да, знаю что там специально сделано, чтоб грузилось по требованию, но у меня специфическая задача ![]() |
|
|
Алексей1153 |
![]()
Сообщение
#2
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
dmsovetov, что в ассерте то пишется ?
и сильно смущает такой подход
думаю, правильнее так - а вдруг количество строк поменяется ?
ну и полезно проверить
- казалось бы, методы модели должны правильно реагировать на невалидные индексы. Ан нет, скажем, табличные модели прекрасно падают, если в некоторые методы передать невалидный индекс . Ещё мне кажется, что нужен будет рекурсивный скан вглубь всего дерева. А сейчас только по первому уровню пробегаешь |
|
|
dmsovetov |
![]()
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 4.12.2015 Пользователь №: 4495 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
думаю, правильнее так - а вдруг количество строк поменяется ? ... ну и полезно проверить Попробовал. Не помогло ![]() Ещё мне кажется, что нужен будет рекурсивный скан вглубь всего дерева. А сейчас только по первому уровню пробегаешь Сигнал directoryLoaded будет вызываться для всех папок, которые я подгрузил через fetchMore. Оно все грузит как надо, проблема в том, что drag'n'drop потом валится вот на таком асерте ![]() ![]() PS прикрепляю минимальный проект к посту.
Прикрепленные файлы
|
|
|
Алексей1153 |
![]()
Сообщение
#4
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
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 |
![]()
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 4.12.2015 Пользователь №: 4495 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Цитата мне сдаётся, что вот тут что-то не так Та не, то у меня так слот называется, его можно по-другому называть - все равно асерт будет. Цитата Этот косячный коннект убираю - ассерт пропадает. Разбирайся, что ты имел в виду в этом коннекте Ну конечно, он ведь больше не делает fetchMore, вот и ассерта нету ![]() Цитата А как у тебя компилятор такое позволил У меня Visual Studio 2013 Community. Студия много чего неправильного позволяет, а потом оно под всякими GCC/LLVM под мак/иос/андроид не собирается, так что лучше с таким не баловаться ![]() |
|
|
ViGOur |
![]()
Сообщение
#6
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Думается мне, что у тебя программа уходит в бесконечную рекурсию, от того и accert
|
|
|
Алексей1153 |
![]()
Сообщение
#7
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
dmsovetov, не знаю, как насчёт одинаковых имён, я к своим слотам и сигналам приписываю префиксы slot_ и signal_ всегда, чтобы не нарываться на одинаковые имена ) Так, на всякий случай. Здесь вроде всё правильно компилятор понимает
ещё момент. Я добавил проверку
и вот такой невалидный индекс ты передаёшь в rowCount, после чего ассерт показывается Причину невалидности не знаю ViGOur, рекурсии нету, поскольку указаны SLOT и SIGNAL , поэтому препроцессор вроде понимает их как разные сигнатуры |
|
|
ViGOur |
![]()
Сообщение
#8
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
dmsovetov |
![]()
Сообщение
#9
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 4.12.2015 Пользователь №: 4495 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
и вот такой невалидный индекс ты передаёшь в rowCount, после чего ассерт показывается Обернул в проверку - все равно ассерт срабатывает ![]() Может тут с потоками что-то не то? Ведь QFileSystemModel вобще в другом потоке сканирует. Кажется понял. Надо вот так цикл поменять:
|
|
|
Алексей1153 |
![]()
Сообщение
#10
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
ага, я добавил и посмотрел - тоже про файлы подумал - но ты меня опередил ))
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 16.2.2025, 19:30 |