2016-04-28 3 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" в setNameFilters() один за другим, чтобы проверить фильтр. Но это не работает для меня.

Так любезно скажите мне, как я мог скрыть это, потому что я не хочу показывать его в моем 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 (фильтр); , SourceTreeView пуст. Он не отображает какой-либо элемент. – rohit

Смежные вопросы