C++ 使用QFileSystemModel隐藏过滤文件,setNameFilterDisables(false)隐藏所有内容

C++ 使用QFileSystemModel隐藏过滤文件,setNameFilterDisables(false)隐藏所有内容,c++,qt,C++,Qt,我正在尝试为我的查看器创建简单的文件筛选器。 想法是只显示过滤器允许的文件,隐藏其他文件(而不是禁用它们)。 找到了一些有用的答案,并使用这些示例编写了以下简单代码: QDir dir("c:/Projects/Qt/Data/spiro/"); QFileSystemModel* model = new QFileSystemModel; model->setRootPath(dir.path()); model->setReadOnly(true); model->set

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

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);
QDir目录(“c:/Projects/Qt/Data/spiro/”;
QFileSystemModel*model=新的QFileSystemModel;
model->setRootPath(dir.path());
模型->设置只读(真);
model->setFilter(QDir::Dirs | QDir::Files | QDir::nodotanddot);
model->setNameFilters(QStringList()setNameFilterDisables)(false);
m_treeView->setModel(model);
但是,它没有按预期工作。
使用line with
setNameFilterDisables(false)
时,我根本没有得到任何文件。
对于我来说,这不是预期的行为,因为我希望未通过筛选的文件,
根本不会显示这些内容。
文档中对此进行了描述:

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


那么,如何正确过滤文件并仅显示过滤后的文件呢?

您忘记了树集根索引:

m_treeView->setRootIndex(model->index(dir.path()));
如果要使目录以及筛选的文件保持可见,请使用
QDir::AllDirs
标记intead of
QDir::Dirs