Название: Модель для просмотра одной папки Отправлено: maydyk от Июль 31, 2009, 12:11 Привет! В Qt я новичок и сразу столкнулся с проблемой. Нужно обеспечить просмотр содержимого папки в QListView. Опыты с QFileSystemModel и QDirModel к результату не привели. Какую модель выбрать и как получить список файлов в одной папке?
Название: Re: Модель для просмотра одной папки Отправлено: m_ax от Июль 31, 2009, 12:23 Оч просто :)
У класса QDir есть метод Код
Получаете список всего что нужно в интересующей вас папке и засовываете его в QListWidget и всё ;) Название: Re: Модель для просмотра одной папки Отправлено: maydyk от Июль 31, 2009, 15:13 Но тогда я получу просто список файлов, а мне нужен "explorer-like" виджет, с иконками и т.п.
Название: Re: Модель для просмотра одной папки Отправлено: pastor от Июль 31, 2009, 15:23 А что именно не получилось с QFileSystemModel?
Название: Re: Модель для просмотра одной папки Отправлено: maydyk от Июль 31, 2009, 15:48 А что именно не получилось с QFileSystemModel? Непонятно как указать директорию для отображения. Какой-бы путь я не передавал в setRootPath(), всё время отображается список дисков, т.е. корень файловой системы. Метода для "перехода" в указанную директорию я не нашел. Название: Re: Модель для просмотра одной папки Отправлено: ритт от Июль 31, 2009, 15:53 Код: const QModelIndex root = model->setRootPath(newDirectory); Название: Re: Модель для просмотра одной папки Отправлено: maydyk от Июль 31, 2009, 16:03 Код: const QModelIndex root = model->setRootPath(newDirectory); Супер! Спасибо, заработало. Жаль только иногда "прорываются" папки несмотря на вызов setFilter(QDir::Files). Название: Re: Модель для просмотра одной папки Отправлено: ритт от Август 01, 2009, 17:31 а присутствует в фильтре System и/или Hidden?
Название: Re: Модель для просмотра одной папки Отправлено: maydyk от Август 04, 2009, 12:44 Эх, продолжаются мучения :) Подскажите плз, можно-ли при использованиии QListView и QFileSystemModel отображать не все файлы в директории, а только часть по известному фильтру?
Казалось правильным решением было использование QSortFilterProxyModel и вызове метода setFilterWildcard(), но не тут-то было! Фильтр применяется не только к файлам, но и ко всем папкам. В результате невозможно получить индекс для вызова QListView::setRootItem() -- путь к папке в модели отсутствует, он отфильтрован. Название: Re: Модель для просмотра одной папки Отправлено: ритт от Август 05, 2009, 02:45 QFileSystemModel::setNameFilters
Название: Re: Модель для просмотра одной папки Отправлено: maydyk от Август 05, 2009, 10:21 QFileSystemModel::setNameFilters К сожалению этот метод даёт нежелательный эффект: через фильтр "прорываются" ранее посещённые директории несмотря на вызов setFilter(QDir::Files).Название: Re: Модель для просмотра одной папки Отправлено: ритт от Август 05, 2009, 10:34 нельзя QDir::Files
QDirModel и QFileSystemModel кешируют всё-подряд - без разбора. поэтому фильтр должен быть как минимум QDir::Dirs или (QDir::Dirs | QDir::Files) так что, если нужны только файлы, проще всего будет навесить проксю, отфильтровывающую папки. но при этом setNameFilters всё-равно эффективнее (хотя бы внутренний мап прокси будет меньше) |