Я использую QFileSystemModel с QListview для отображения всех файлов из каталога. Я хотел бы, чтобы фильтровать эту модель для отображения некоторых категорий файлов, таких как:Фильтрация QFilesystemModel
- текстовых файлов: * .txt * .csv * .tab
- музыка: * .mp3 * .flac * .ogg
- фильмы: * .avi * .mkv
Мой текущий код:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
Filemodel = new QFileSystemModel(this) ;
Filemodel->setFilter(QDir::NoDotAndDotDot | QDir::Files) ;
proxy_model = new QSortFilterProxyModel();
proxy_model ->setDynamicSortFilter(true);
proxy_model ->setSourceModel(Filemodel);
proxy_model ->setFilterKeyColumn(0);
ui->Filtered_tbView->setModel(proxy_model) ;
}
(...)
/* combobox event to select file type to filter */
void MainWindow::on_FSFilter_Combo_currentIndexChanged(int index)
{
proxy_model->setFilterWildcard("*.txt"); // just a simple example here
ui->Filtered_tbView->setModel(proxy_model) ;
}
Этот код не отображает ничего, в то время как все типы файлов присутствуют в каталоге.
Кроме того, вещи, которые я пробовал, что не было хорошо для меня (указатели могут быть полезны для дальнейших читателей):
- setNameFilters: хорошо работать, но позволяет показать все файлы (нефильтрованный просто неактивны)
- the Custom Sort/Filter Model Example -> при использовании QSortFilterProxyModel этот пример несколько сложный, чтобы просто отфильтровать расширения файла, кроме того, он использует regexp, что не самый лучший метод при использовании множества фильтров, подобных здесь.
- Я также нашел interesting snippet from qt-project но не смогли узнать, как реализовать его для строк с несколькими расширениями