如何在QFileSytemModel中隐藏特定目录

How to hide Particular directories in QFileSytemModel

本文关键字:隐藏 QFileSytemModel      更新时间:2023-10-16

我有一个QFileSystemModel,它被用作QTreeView中的模型。这项工作很好,现在我有一些目录的名称。我想把它隐藏在QTreeview中。

QString strCompleteDirectoryPath = "/Volumes/";
QTreeView *SourceTreeView = new QTreeView;
QSize ItemSize(20,20);
QFileSystemModel *model = new QFileSystemModel();
model->setNameFilterDisables(false);
model->setRootPath(strCompleteDirectoryPath);
model->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::Hidden);
model->setNameFilters(QStringList("samplefolder"));
SourceTreeView->setModel(model);
SourceTreeView->setRootIndex(model->index(strCompleteDirectoryPath));
SourceTreeView->header()->resizeSection(0,350);
SourceTreeView->setIconSize(ItemSize);

我想在"/Volumes"目录中隐藏"samplefolder"。我在setNameFilters()中一个接一个地使用字符串"samplefolder""/Volumes/samplefolder"来检查我的过滤器。但这对我不起作用。

所以请告诉我我怎么能把它隐藏起来,因为我不想在我的QTreeView中显示它。

您应该使用QSortFilterProxyModel。示例:

QString strCompleteDirectoryPath = "/Volumes/";
QTreeView *SourceTreeView = new QTreeView;
QFileSystemModel *model = new QFileSystemModel(SourceTreeView);
model->setRootPath(strCompleteDirectoryPath);
model->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::Hidden);
QSortFilterProxyModel* filter = new QSortFilterProxyModel(model);
filter->setFilterRegExp(QRegExp("^((?!samplefolder).)*$", Qt::CaseInsensitive));
SourceTreeView->setModel(filter);