Ich möchte, dass der Filter in einem QFileDialog mit allen Audiodateitypen übereinstimmt, die von Phonon auf der fraglichen Plattform unterstützt werden.QFileDialog-Filter von Mime-Typen
1 - Allerdings kann ich in Qt keinen Weg finden, MIME-Typen in einem Filter zu verwenden. Wie kann ich das machen?
2 - Oder wie finde ich die entsprechenden Dateierweiterungen für die MIME-Typen manuell? Die Lösung sollte Qt-basiert sein oder zumindest plattformübergreifend sein und überall unterstützt werden.
Option eines ist meine bevorzugte Lösung, aber Option zwei als auch tun ..
Es folgt eine kurze Kode mein 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);
}
Schön, das ist eine gute Lösung. Es gibt jedoch zwei Nachteile, soweit ich sehen kann. Eine kleine, da die Filter Dropdown-Box im Dialogfeld nicht mit zulässigen Dateitypen gefüllt wird. Sie können jedoch wahrscheinlich nur einen beschreibenden Text dort einfügen. Wie in meinem Fall "Audiodateien". Ein gravierenderer Nachteil ist, dass Sie native Dateidialoge nicht mehr verwenden können. Dies ist ein Show-Stopper für mich und meine letzte (?) Lösung ist eine Mime.types-Datei mit meiner Anwendung zu versenden, aber ich hasse es! Wenn dir der native Dialog egal ist, ist das meiner Meinung nach eine bessere Lösung. Daher markiere ich es als eine richtige Antwort. – Mathias
Ja, native Dateidialoge haben ihre Vorteile und ihre Probleme. Sie sind zuverlässiger als die Qt-Dialoge (insbesondere mit Netzwerkfreigaben und Favoriten), aber Sie können nicht wie in den Qt-Dialogen Schaltflächen-Text und andere Dinge anpassen. WRT Dropdown-Filter, Sie haben Recht. Ich bin neugierig, ob die Dateien basierend auf der Erweiterung gefiltert werden, nachdem ein Proxy-Modell installiert wurde, aber nicht getestet, um sicher zu wissen. –