Фильтровать файлы QFileInfoList с помощью Qt

у меня есть QFileInfoList (список), который содержит информацию о каталоге и его файле

QFileInfoList list = directory.entryInfoList();

Как я могу применить фильтры, чтобы удалить все, кроме файла изображения(jpg, gif, png и т. д.) ?

вот простой цикл foreach, который удаляет только все, что не является файлом

foreach (QFileInfo f, list){
        if (!f.isFile()){
        list.removeOne(f);
        }

Как я могу применить фильтры, чтобы удалить все, кроме файла изображения(jpg, gif, png и т. д.) ?

2 ответов


QDir:: entryInfoList () принимает фильтры имен, если вам удобно определять изображения по расширению:

QStringList nameFilter;
nameFilter << "*.png" << "*.jpg" << "*.gif";
QFileInfoList list = directory.entryInfoList( nameFilter, QDir::Files );

прежде всего, почему бы вам не использовать правильные флаги для QDir::entryInfoList и отфильтровать все, что не является каталогом, и нужные расширения файлов.

во-вторых, вы можете использовать для каждого файла `bool QImageReader:: canRead(, но он будет иметь доступ к файлам, чтобы проверить, являются ли они изображениями, поэтому это будет довольно медленно.

также вы можете попытаться создать поддерживаемые расширения с помощью QImageReader::supportedImageFormats (), и добавьте их в качестве фильтра в entryInfoList