Chcę, aby filtr w QFileDialog pasował do wszystkich typów plików audio obsługiwanych przez Phonon na platformie, o której mowa.Filtr QFileDialog z mime-type
1 - Jednak nie jestem w stanie znaleźć sposobu w Qt, aby użyć typów MIME w filtrze. Jak mogę to zrobić?
2 - Lub w jaki sposób mogę ręcznie znaleźć odpowiednie rozszerzenia plików dla rodzajów MIME? Rozwiązanie powinno być oparte na Qt, lub przynajmniej być platformą crossową i wspieraną wszędzie tam, gdzie jest Qt.
Opcja jest moim preferowanym rozwiązaniem, jednak opcja dwa zrobi jak dobrze ..
Poniżej krótki kod opisujący mój problem:
#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);
}
Fajnie, to jest dobre rozwiązanie. Na ile widzę, są jednak dwie wady. Podrzędny, ponieważ okno dialogowe filtru w oknie dialogowym nie zostanie wypełnione dozwolonymi typami plików. Możesz jednak po prostu umieścić tam opisowy tekst. Podobnie jak w moim przypadku "Pliki audio". Poważniejszą wadą jest to, że nie można już korzystać z dialogów plików rodzimych. To jest dla mnie przystawka na pokaz, a moim ostatecznym (?) Rozwiązaniem jest wysłanie pliku mime.types z moją aplikacją, ale go nienawidzę! Jeśli nie zależy Ci na rodzimym oknie dialogowym, jest to moim zdaniem lepsze rozwiązanie. Dlatego zaznaczam to jako poprawną odpowiedź. – Mathias
Tak, rodzime okna dialogowe plików mają swoje zalety i problemy. Są bardziej niezawodne niż okna dialogowe Qt (szczególnie w przypadku udziałów sieciowych i ulubionych), ale nie można dostosowywać tekstu przycisku i innych rzeczy, jak to możliwe, za pomocą okien dialogowych Qt. Filtr rozwijany WRT, masz rację. Ciekaw jestem, czy pliki są filtrowane na podstawie rozszerzenia po wprowadzeniu modelu proxy, ale nie zostały przetestowane, aby wiedzieć na pewno. –