Domanda

Voglio il filtro in un QFileDialog per soddisfare tutti i tipi di file audio supportati da Phonon sulla piattaforma in questione.

1 - Comunque io non sono in grado di trovare un modo in Qt per utilizzare mime tipi in un filtro. Come posso fare?

2 - O come posso trovare le estensioni di file corrispondenti per le mimetypes manualmente? La soluzione deve essere basata Qt, o almeno essere cross-platform e sostenuto ovunque Qt è.

Prima opzione è la mia soluzione preferita, tuttavia l'opzione due farà così ..

A seguito di un breve codice che descrive il mio 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);
}
È stato utile?

Soluzione

È possibile filtrare il mime tipi con QFileDialog::setProxyModel . Probabilmente si vorrà sottoclasse QSortFilterProxyModel e di override filterAcceptsRow modo che accetti solo quando il file è del mimo-tipo appropriato. Speriamo che questo, quando si lega con un modo semplice per identificare i tipi MIME di un file, servirà come una buona soluzione.

Altri suggerimenti

Chiamata availableMimeTypes() sulla Phonon backend e quindi scorrere l'elenco tipo MIME risultante e per ognuno enumerare le estensioni restituiti da QMimeType::extensions().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top