2016-04-28 165 views
0

我有一个QFileSystemModel它被用作QTreeView中的模型。这项工作现在好了,我有一些目录的名称。我想隐藏在QTreeview如何隐藏QFileSytemModel中的特定目录

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"两个字符串逐一检查我的过滤器。但它不适合我。

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

回答

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

不适用于我。当我设置SourceTreeView-> setModel(filter); 。 SourceTreeView变为空白。它不显示任何项目。 – rohit