Фильтруйте файлы QFileInfoList с помощью Qt - PullRequest
7 голосов
/ 06 декабря 2010

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

QFileInfoList list = directory.entryInfoList();

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

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

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

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

Ответы [ 2 ]

17 голосов
/ 07 декабря 2010

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

QStringList nameFilter;
nameFilter << "*.png" << "*.jpg" << "*.gif";
QFileInfoList list = directory.entryInfoList( nameFilter, QDir::Files );
2 голосов
/ 06 декабря 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...