Скрыть эти папки не имеют отфильтрованных файлов

Я работаю над QTreeviews, в нем есть все диски. а другой отображает все файлы и папки, соответствующие этим дискам. Я применил фильтры для некоторых конкретных файлов. Таким образом, он показывает все те папки, которые имеют эти конкретные форматы фильтров, а также те папки, которые не имеют отфильтрованных файлов в виде пустых папок. Теперь моя проблема в том, что я не хочу показывать те папки, в которых нет моих отфильтрованных файлов. Я использую это:

QFileSystemModel *fileSystemModel = new QFileSystemModel(this);
fileSystemModel->setRootPath(path);
QStringList filters;
filters <<"*.jpeg" <<"*.pict" <<"*.PICT" <<"*.xpm" <<"*.xbm" <<"*.ppm" <<"*.pbm" <<"*.pgm" <<"*.XBM" <<"*.XPM" <<"*.PPM" <<"*.PBM" <<"*.PGM" <<"*.png" <<"*.psd" <<"*.bmp"<<"*.jp2" <<"*.tiff" <<"*.gif" <<"*.tga" <<"*.jpg" <<"*.JPG" <<"*.JPEG" <<"*.BMP" <<"*.JP2"<<"*.PSD" <<"*.PNG" <<"*.TIFF" <<"*.GIF" <<"*.TGA"  ;
fileSystemModel->setNameFilters(filters);
fileSystemModel->setNameFilterDisables(0);
fileSystemModel->setSupportedDragActions(Qt::CopyAction);
fileSystemModel->fetchMore(fileSystemModel->index(path));
ui->treeView_2->setModel(fileSystemModel);
ui->treeView_2->setRootIndex(fileSystemModel->index(path));
ui->treeView_2->setColumnWidth(0,300);

Может кто-нибудь, пожалуйста, помогите мне выйти из этого.
Благодарю.

1

Решение

Посмотрите на документация QSortFilterProxyModel

Вы можете проверить, есть ли в папке какое-либо содержимое, а затем решить, следует ли отфильтровать его по результатам или нет.

-1

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

Я делаю это для создания моей Qfilesystemmodel:

QFileSystemModel *fileSystemModel = new QFileSystemModel(this);
fileSystemModel->setRootPath(path);
QStringList filters;
filters <<"*.jpeg" <<"*.pict" <<"*.PICT";
fileSystemModel->setNameFilters(filters);
fileSystemModel->setNameFilterDisables(0);
ui->treeView_2->setModel(fileSystemModel);
ui->treeView_2->setRootIndex(fileSystemModel->index(path));
ui->treeView_2->setColumnWidth(0,300);
connect(fileSystemModel,SIGNAL(directoryLoaded(QString)),this,SLOT(onDirLoaded(QString)));void MainWindow::onDirLoaded(QString path)
{

QFileSystemModel *fileSystemModel=(QFileSystemModel*)ui->treeView_2->model();
QModelIndex index = fileSystemModel->index(path);
QStringList filters;

filters <<"*.jpeg" <<"*.pict" <<"*.PICT";
fileSystemModel->setNameFilters(filters);
fileSystemModel->setNameFilterDisables(0);
int rowCount = fileSystemModel->rowCount(index);
for(int i=0;i<rowCount;i++)
{
QModelIndex mi = fileSystemModel->index(i,0,index);
QFileInfo fileInfo = fileSystemModel->fileInfo(mi);
if (!templist.contains(fileInfo.absoluteFilePath()))
{
templist << fileInfo.absoluteFilePath();
tempNamelist << fileInfo.fileName();
}
if(!bloaded)
{
if(fileSystemModel->hasChildren(mi))
{
QModelIndex index1 = fileSystemModel->index(i,0,index);
int rowCount1 = fileSystemModel->rowCount(index1);
if(rowCount1)
{
onDirLoaded(fileInfo.absoluteFilePath());
}
}
}
}}

с помощью этого я могу создать Qfilsystemmodel, но он также показывает те подпапки, которые не имеют отфильтрованных файлов. Я не хочу показывать эти подпапки. Ваша помощь будет очень полезна.

Спасибо,

0

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