过滤QFilesystemModel [英] Filtering QFilesystemModel

查看:246
本文介绍了过滤QFilesystemModel的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 QFileSystemModel QListview 来显示目录中的所有文件. 我想过滤该模型以显示某些类别的文件,例如:

I'm using a QFileSystemModel with a QListview to display all files from a directory. I'd like to filter that model to display some categories of files like :

  • 文本文件:* .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 )                ;
}

当目录中存在所有类型的文件时,该代码不显示任何内容.

That code doesn't display anything while all type of files are present in the directory.

此外,我尝试过的事情对我来说并不好(指针可能对其他读者有用):

Besides, things I've tried that wasn't fine for me (pointers may be useful for further readers) :

  • setNameFilters:运行良好,但可以显示所有文件(未过滤的文件为灰色)
  • 在使用QSortFilterProxyModel时,
  • 自定义排序/过滤器模型示例->此示例有些复杂,无法过滤掉文件扩展名,此外,它使用regexp并不是在使用许多类似此处的过滤器时的最佳方法.
  • 我还从qt-project中找到了有趣的代码段,但找不到如何对具有多个扩展名的行实现该功能
  • setNameFilters : work well but lets show all files (unfiltered are just greyed)
  • the Custom Sort/Filter Model Example -> while using QSortFilterProxyModel this example is somewhat too complicated to just filter out the file extentions, besides it uses regexp that is not the best method when using many filters like here.
  • I've also found an interesting snippet from qt-project but couldn't found out how to implement it for rows with multiple extensions

推荐答案

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

The easiest way is to use QFileSystemModel::setNameFilters.

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

With the property QFileSystemModel::nameFilterDisables you can choose between filtered out files being disabled or hidden.

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 )                  ;
}

这篇关于过滤QFilesystemModel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆