1

I have a QFileSystemModel which is use as a model in QTreeView . This work fine now I have names of some directories. Which I want to hide in 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);

I want to hide "samplefolder" in "/Volumes" directory. I use both strings "samplefolder" and "/Volumes/samplefolder" in setNameFilters() one by one to check my filter. But it does not work for me.

So kindly tell me how could I hide this because I dont want to show it in my QTreeView.

Evgeny
  • 3,910
  • 2
  • 20
  • 37
Rohit Chauhan
  • 151
  • 1
  • 3
  • 14

1 Answers1

1

You should use QSortFilterProxyModel for this. Example:

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);
Evgeny
  • 3,910
  • 2
  • 20
  • 37
  • Not working for me. When I set SourceTreeView->setModel(filter); . SourceTreeView goes blank. It does not display any item. – Rohit Chauhan May 02 '16 at 04:36