2010-12-06 11 views
7

que tienen un QFileInfoList (lista) que contiene información sobre un directorio y su archivoarchivos QFileInfoList filtro con Qt

QFileInfoList list = directory.entryInfoList(); 

¿Cómo puedo aplicar filtros para eliminar todo excepto archivo de imagen (JPG, GIF, PNG, etc.)?

Aquí es un simple bucle foreach que sólo elimina todo lo que no es un archivo

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

¿Cómo puedo aplicar filtros para eliminar todo excepto archivo de imagen (JPG, GIF, PNG, etc.)?

Respuesta

15

QDir :: entryInfoList() toma filtros de nombre, si se siente cómodo determinación de imágenes por extensión:

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

En primer lugar, ¿por qué no se utilizan las marcas adecuadas para QDir :: entryInfoList y se filtra todo lo que no es un directorio y las extensiones de archivo deseadas.

En segundo lugar, es posible utilizar en cada fichero `bool QImageReader :: CanRead (, pero va a tener acceso a los archivos para comprobar si son imágenes, por lo que será bastante lento.

También puede tratar de construir hasta el apoyo extensiones con QImageReader::supportedImageFormats() y agregarlos como filtro para entryInfoList

Cuestiones relacionadas