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

时间:2015-03-17 22:10:47

标签: c++ qt

我正在尝试为我的观众创建简单的文件过滤器 想法是仅显示过滤器允许的文件并隐藏其他文件(不禁用它们) 找到了一些有用的答案herehere,并使用这些示例编写了这个简单的代码:

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

然而,它没有按预期工作 当使用setNameFilterDisables(false)行时,我根本没有文件。
这对我来说不是预期的行为,因为我期望没有通过过滤器的文件,
根本不会显示。
这在文档中描述:

  

此属性保存不通过名称过滤器的文件   隐藏或禁用。

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

1 个答案:

答案 0 :(得分:2)

你忘了树设置根索引:

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

如果要保持目录以及过滤后的文件,请使用QDir::AllDirs的{​​{1}}标记内容。