Russian Qt Forum
Ноябрь 23, 2024, 14:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Модель для просмотра одной папки  (Прочитано 10093 раз)
maydyk
Гость
« : Июль 31, 2009, 12:11 »

Привет! В Qt я новичок и сразу столкнулся с проблемой. Нужно обеспечить просмотр содержимого папки в QListView. Опыты с QFileSystemModel и QDirModel к результату не привели. Какую модель выбрать и как получить список файлов в одной папке?
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #1 : Июль 31, 2009, 12:23 »

Оч просто  Улыбающийся

У класса QDir есть метод
Код
C++ (Qt)
QStringList entryList ( Filters filters = NoFilter, SortFlags sort = NoSort ) const
 

Получаете список всего что нужно в интересующей вас папке и засовываете его в QListWidget и всё  Подмигивающий
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
maydyk
Гость
« Ответ #2 : Июль 31, 2009, 15:13 »

Но тогда я получу просто список файлов, а мне нужен "explorer-like" виджет, с иконками и т.п.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Июль 31, 2009, 15:23 »

А что именно не получилось с QFileSystemModel?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
maydyk
Гость
« Ответ #4 : Июль 31, 2009, 15:48 »

А что именно не получилось с QFileSystemModel?

Непонятно как указать директорию для отображения. Какой-бы путь я не передавал в setRootPath(), всё время отображается список дисков, т.е. корень файловой системы. Метода для "перехода" в указанную директорию я не нашел.
Записан
ритт
Гость
« Ответ #5 : Июль 31, 2009, 15:53 »

Код:
const QModelIndex root = model->setRootPath(newDirectory);
view->setRootIndex(root);
Записан
maydyk
Гость
« Ответ #6 : Июль 31, 2009, 16:03 »

Код:
const QModelIndex root = model->setRootPath(newDirectory);
view->setRootIndex(root);

Супер! Спасибо, заработало. Жаль только иногда "прорываются" папки несмотря на вызов setFilter(QDir::Files).
Записан
ритт
Гость
« Ответ #7 : Август 01, 2009, 17:31 »

а присутствует в фильтре System и/или Hidden?
Записан
maydyk
Гость
« Ответ #8 : Август 04, 2009, 12:44 »

Эх, продолжаются мучения Улыбающийся Подскажите плз, можно-ли при использованиии QListView и QFileSystemModel отображать не все файлы в директории, а только часть по известному фильтру?

Казалось правильным решением было использование QSortFilterProxyModel и вызове метода setFilterWildcard(), но не тут-то было! Фильтр применяется не только к файлам, но и ко всем папкам. В результате невозможно получить индекс для вызова QListView::setRootItem() -- путь к папке в модели отсутствует, он отфильтрован.
Записан
ритт
Гость
« Ответ #9 : Август 05, 2009, 02:45 »

QFileSystemModel::setNameFilters
Записан
maydyk
Гость
« Ответ #10 : Август 05, 2009, 10:21 »

QFileSystemModel::setNameFilters
К сожалению этот метод даёт нежелательный эффект: через фильтр "прорываются" ранее посещённые директории несмотря на вызов setFilter(QDir::Files).
Записан
ритт
Гость
« Ответ #11 : Август 05, 2009, 10:34 »

нельзя QDir::Files
QDirModel и QFileSystemModel кешируют всё-подряд - без разбора. поэтому фильтр должен быть как минимум QDir::Dirs или (QDir::Dirs | QDir::Files)
так что, если нужны только файлы, проще всего будет навесить проксю, отфильтровывающую папки. но при этом setNameFilters всё-равно эффективнее (хотя бы внутренний мап прокси будет меньше)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.171 секунд. Запросов: 23.