首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >滤波QFilesystemModel

滤波QFilesystemModel
EN

Stack Overflow用户
提问于 2013-06-18 10:42:41
回答 1查看 10.2K关注 0票数 2

我使用QFileSystemModel和QListview来显示目录中的所有文件。我希望筛选该模型以显示某些类别的文件,如:

  • 文本文件:*.txt *.csv *.tab
  • 音乐:*.mp3 *.flac *.ogg
  • 电影:*.avi *.mkv

我目前的代码是:

代码语言:javascript
运行
复制
  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 )                ;
}

(...)

代码语言:javascript
运行
复制
/* 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时,这个例子有点复杂,不能只过滤掉文件扩展名,而且它使用regexp,这在使用这里的许多过滤器时并不是最好的方法。
  • 我还找到了一个来自qt-project的有趣片段,但无法找到如何为多个扩展行实现它
EN

回答 1

Stack Overflow用户

发布于 2013-06-20 12:28:54

最简单的方法是使用QFileSystemModel::setNameFilters

使用属性QFileSystemModel::nameFilterDisables,您可以在禁用或隐藏筛选出的文件之间进行选择。

代码语言:javascript
运行
复制
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    Filemodel = new QFileSystemModel(this)                      ;
    Filemodel->setFilter( QDir::NoDotAndDotDot | QDir::Files )  ;

    QStringList filters;
    filters << "*.txt";

    Filemodel.setNameFilters(filters);
    Filemodel.setNameFilterDisables(false);

    ui->Filtered_tbView->setModel( Filemodel )                  ;
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17166866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档