Как скрыть отдельные каталоги в QFileSytemModel

у меня есть 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);

Я хочу спрятаться "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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]