【问题标题】:Filtering QFilesystemModel过滤 QFilesystemModel
【发布时间】:2013-06-14 13:10:24
【问题描述】:

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

  • 文本文件:*.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 时,此示例有点过于复杂,无法仅过滤掉文件扩展名,此外它使用的正则表达式在使用像这里这样的许多过滤器时并不是最好的方法。
  • 我还找到了一个 interesting snippet from qt-project,但不知道如何为具有多个扩展名的行实现它

【问题讨论】:

    标签: qt qlistview qfilesystemmodel


    【解决方案1】:

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

    使用属性QFileSystemModel::nameFilterDisables,您可以选择禁用或隐藏过滤掉的文件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多