如何在QFileSytemModel中隐藏特定目录

时间:2016-04-28 10:57:33

标签: c++ qt qtreeview qfilesystemmodel qmodelindex

我有一个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);

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

请告诉我如何隐藏这个,因为我不想在我的QTreeView中显示它。

1 个答案:

答案 0 :(得分:1)

您应该使用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);