Название: Отображение файлов Отправлено: kirill от Январь 26, 2009, 08:50 Здравствуйте.
Хочу отображать в QTreeView только файлы некой директории. Делаю модель: Код
Делаю TreeView Код
Связываю: Код
Задаю директорию в слоте, который потом будет вызываться по нажатию батона. Код
Вроде бы работает, но! Допустим у меня есть папка с вложенными: (вложение 1) (http://1.JPG) Мой код нормально отображает только файлы из этой папки. Теперь я через слот changeDirectory задаю подпапку исходной. Тоже отображается нормально - т.е. только файлы. Следующим шагом я задаю исходную папку через слот, т.е. возвращаюсь к исходной. И вот тут получается косяк - отображаются файлы и к ним вдобавок папка, которая была на предыдущем шаге, т.е. подпапка. Во вложениях я постарался изобразить эту ситуацию. Что не так у меня сделано? Почему начинают отображаться субпапки, почему кладется болт на установленный setFilter(QDir::Files) ? К тому же отображаются не все папки, а только посещенная. Help me! Название: Re: Отображение файлов Отправлено: pastor от Январь 26, 2009, 12:15 Такой вопросец, а вы смотрели на QDirModel?
Код
Название: Re: Отображение файлов Отправлено: kirill от Январь 26, 2009, 12:40 Такой вопросец, а вы смотрели на QDirModel? Код
Ну я использую QFileSystemModel. Не думаю что между ними большая разница. А как ваш пост поможет мне решить проблему? Название: Re: Отображение файлов Отправлено: pastor от Январь 26, 2009, 12:57 Ну я использую QFileSystemModel. Не думаю что между ними большая разница. В вашем первом посте указана FileSystemModel, поэтому я предположил что это ваша модель, а не кутишная. Поэтому и посоветовал попробовать воспользоваться QDirModel Название: Re: Отображение файлов Отправлено: kirill от Январь 26, 2009, 13:00 oh, shit.
Не заметил. Да, но я просто унаследовался от нее, а функционал можно считать неизменным. Название: Re: Отображение файлов Отправлено: developer от Январь 26, 2009, 13:49 Цитировать Не заметил. Да, но я просто унаследовался от нее, а функционал можно считать неизменным. Не всегда, для корректной работи нужно правильно переопределить некоторые методи, какие именно нужно смотреть в базовом классе, ето часто помогаетНазвание: Re: Отображение файлов Отправлено: kirill от Январь 26, 2009, 14:14 Да нет, все гораздо проще.
Давайте считать, что наследования нету и используется чистая QFileSystemModel. Собственно непонятно, почему модель так странно себя ведет. Если бы у меня был фильтр setFilter(QDir::AllDirs) я бы даже не спрашивал ничего, т.к. в этом случае работает все хорошо. Но я же хочу только список файлов, т.е. фильтр QDir::Files. А тут такой косяк - влезают директории, хотя четко прописан фильр. Название: Re: Отображение файлов Отправлено: ритт от Январь 26, 2009, 19:20 написал тестовое приложение - действительно, похоже на багу Qt. нужно протестировать под 4.5-snapshot - там было множество коммитов в QFileSystemModel.
как протестирую под снапшотом, отпишусь. Название: Re: Отображение файлов Отправлено: ритт от Январь 26, 2009, 20:36 бага осталась. kirill, если есть желание, чтобы исправление попало в 4.5, создавай таску в трекере - приложи минимальный компилябельный пример. когда ответят и присвоят баге публичный номерок, этот номерок сюда.
я в свободное время пороюсь в коде - поищу багу. если найду, отправлю патч к существующей таске - это поможет слегка ускорить процесс. Название: Re: Отображение файлов Отправлено: ритт от Январь 27, 2009, 04:03 так-с, за багу это уже не примут, максимум - за недостаточно чёткое документирование.
Цитировать void QFileSystemModel::setFilter ( QDir::Filters filters ) Sets the directory model's filter to that specified by filters. Note that the filter you set should always include the QDir::AllDirs enum value, otherwise QFileSystemModel won't be able to read the directory structure. судя по коду, просто не предполагалось, что QFileSystemModel будет использоваться только для отображения файлов. если папка единожды была прочитана, она со всем содержимым кэшируется в списке известных файлов, а это непременно означает, что любое последующее перечисление в модель папки, расположенной на уровень выше данной, повлечёт включение известной папки в список видимых файлов (т.к. закешированные данные не проходят фильтрацию снова, а информация о папке не проходила фильтрацию и в первый раз - папка была принудительно указана в качестве корневой /* сами понимаете, если сразу отфильтровать корневой элемент, модель останется пустой */) kirill, попробуй достаточно ёмко мотивировать выбор именно в пользу QFileSystemModel, а не QDirModel. если имеются веские причины, будем развивать тему далее... Название: Re: Отображение файлов Отправлено: kirill от Январь 27, 2009, 05:41 Подозреваю, что косяк именно в моей реализации, не зря я эту тему разместил в вопросах новичков )).
По поводу обязательного включения в фильтр AllDirs - та же фраза есть и для QDirModel. То есть получается, что используя эти модели невозможно отобразить только файлы не прибегая к прокси моделям. Выбор в пользу QFileSystemModel был сделан из-за того, что в этой модели установка setFilter(QDir::Files) стала работать и отображать только файлы. QDirModel на этот фильтр не обращал внимания. |