gpt4 book ai didi

qt - 过滤 QFilesystemModel

转载 作者:行者123 更新时间:2023-12-02 06:36:34 29 4
gpt4 key购买 nike

我正在使用带有 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但找不到如何为具有多个扩展名的行实现它

最佳答案

最简单的方法是使用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 ) ;
}

关于qt - 过滤 QFilesystemModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17166866/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com