2016-04-28 40 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