我有一个 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);
关于c++ - 如何隐藏 QFileSystemModel 中的特定目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36912628/