我正在使用带有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 :效果很好,但让我们显示所有文件(未过滤的只是灰色的)
- 自定义排序/过滤模型示例-> 在使用 QSortFilterProxyModel 时,此示例有点过于复杂,无法仅过滤掉文件扩展名,此外它使用的正则表达式在使用许多过滤器时不是最好的方法,例如这里。
- 我还从 qt-project 中找到了一个有趣的片段,但不知道如何为具有多个扩展名的行实现它