我有一个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
中显示它。
答案 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);