使用QFileSystemModel隐藏筛选的文件,setNameFilterDisables(false)隐藏所有内容

Hide filtered files with QFileSystemModel, setNameFilterDisables(false) hides everything

本文关键字:false 隐藏所 setNameFilterDisables 隐藏 QFileSystemModel 筛选 文件 使用      更新时间:2023-10-16

我正在尝试为我的查看器创建简单的文件过滤器
想法是只显示过滤器允许的文件并隐藏其他文件(而不是禁用它们)
这里和这里都找到了一些有用的答案,利用这些例子,我写下了这个简单的代码:

QDir dir("c:/Projects/Qt/Data/spiro/");
QFileSystemModel* model = new QFileSystemModel;
model->setRootPath(dir.path());
model->setReadOnly(true);
model->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
model->setNameFilters(QStringList() << "*.dbx");
// without this line, all files are displayed, filtered out are disabled
model->setNameFilterDisables(false);
m_treeView->setModel(model);

然而,它并没有如预期的那样发挥作用
当将line与setNameFilterDisables(false)一起使用时,我根本没有得到任何文件
这不是我所期望的行为,因为我期望未通过筛选的文件,
根本不会出现
这在文档中有描述:

此属性保存未通过名称筛选器的文件是否隐藏或禁用。

那么,如何正确地过滤文件并只显示经过过滤的文件呢?

您忘记了树集根索引:

m_treeView->setRootIndex(model->index(dir.path()));

如果要使目录和筛选的文件保持可见,请使用QDir::Dirs的内部QDir::AllDirs标志。