у меня есть 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
,
Вы должны использовать 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);
Других решений пока нет …