Desidero che il filtro in QFileDialog corrisponda a tutti i tipi di file audio supportati da Phonon sulla piattaforma in questione.QFileDialog filter from mime-types
1 - Tuttavia non riesco a trovare un modo in Qt per utilizzare i tipi MIME in un filtro. Come lo posso fare?
2 - O come posso trovare manualmente le estensioni dei file corrispondenti per i tipi di mimo? La soluzione dovrebbe essere basata su Qt, o almeno essere cross-platform e supportata ovunque sia Qt.
Opzione uno è la mia soluzione preferita, tuttavia l'opzione due faranno così ..
che segue è 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);
}
Bello, questa è una buona soluzione. Ci sono tuttavia due inconvenienti per quanto posso vedere. Uno minore, poiché la casella a discesa del filtro nella finestra di dialogo non verrà riempita con i tipi di file consentiti. Comunque probabilmente puoi semplicemente inserire del testo descrittivo lì. Come nel mio caso "File audio". Uno svantaggio più grave è che non è più possibile utilizzare le finestre di dialogo dei file nativi. Questo è uno stopper per me e la mia soluzione finale (?) È quella di spedire un file mime.types con la mia applicazione, ma io lo odio! Se non ti interessa il dialogo nativo, questa è una soluzione migliore secondo me. Quindi lo segnalo come risposta corretta. – Mathias
Sì, le finestre di dialogo dei file nativi hanno i loro vantaggi e i loro problemi. Sono più affidabili delle finestre di dialogo Qt (specialmente con condivisioni di rete e preferiti), ma non è possibile personalizzare il testo dei pulsanti e altre cose come è possibile con le finestre di dialogo Qt. Filtro a discesa WRT, hai ragione. Sono curioso di sapere se i file vengono filtrati in base all'estensione dopo aver installato un modello proxy, ma non sono stati testati per essere sicuri. –