Фильтровать файлы 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