Pregunta

Quiero el filtro en una QFileDialog para que coincida con todos los tipos de archivos de audio soportados por fonones en la plataforma en cuestión.

1 - Sin embargo yo no soy capaz de encontrar una manera de utilizar en Qt tipos MIME en un filtro. ¿Cómo puedo hacer eso?

2 - O cómo puedo encontrar las extensiones de los archivos correspondientes para los tipos MIME de forma manual? La solución debe basarse Qt, o al menos ser multiplataforma y apoyado por todas partes Qt es.

La opción uno es mi solución preferida, sin embargo la segunda opción va a hacer, así ..

A continuación se presenta una breve descripción de código de mi problema:

#include <QApplication>
#include <QFileDialog>
#include <QStringList>
#include <phonon/backendcapabilities.h>

QStringList mime_to_exts(QString mime)
{
   // WHAT TO REALLY DO ??
   // NEEDLESS TO SAY; THIS IS WRONG...
   return QStringList(mime.split("/").back().split('-').back());
}

int main(int argc, char **argv)
{
   QApplication app(argc, argv);
   app.setApplicationName("phononext");

   QStringList p_audio_exts;
   QStringList p_mime_types = Phonon::BackendCapabilities::availableMimeTypes();
   for(QStringList::iterator i = p_mime_types.begin(), ie = p_mime_types.end(); i != ie; i++)
   {
      if((*i).startsWith("audio"))
         p_audio_exts << mime_to_exts(*i);
   }

   QString filter = QString("All Files(*)");
   if(!p_audio_exts.isEmpty())
   {
      QString p_audio_filter = QString("Audio Files (*.%1)").arg(p_audio_exts.join(" *."));
      filter = QString("%1;;%2").arg(p_audio_filter).arg(filter);
   }

   QFileDialog::getOpenFileName(NULL, "Open Audio File", QString(), filter);
}
¿Fue útil?

Solución

Puede filtrar por tipos MIME con QFileDialog::setProxyModel . Usted probablemente querrá subclase QSortFilterProxyModel y anulación filterAcceptsRow para que acepte únicamente cuando el archivo es del tipo MIME apropiado. Con suerte esto, cuando se une con una forma fácil de identificar los tipos MIME de un archivo, servirá como una buena solución.

Otros consejos

Call availableMimeTypes() en la Phonon backend y luego bucle a través de la lista de tipo MIME resultante y para cada uno enumerar las extensiones devueltos por QMimeType::extensions().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top