Je souhaite que le filtre dans un QFileDialog corresponde à tous les types de fichiers audio pris en charge par Phonon sur la plate-forme en question.Filtre QFileDialog de type mime
1 - Cependant, je ne suis pas capable de trouver un moyen dans Qt d'utiliser des types MIME dans un filtre. Comment puis je faire ça?
2 - Ou comment puis-je trouver manuellement les extensions de fichier correspondantes pour les mimetypes? La solution doit être basée sur Qt, ou au moins être multi plate-forme et supportée partout où Qt est.
La première option est ma solution préférée, mais l'option deux vont faire aussi bien ..
suivant est un code court qui décrit mon problème:
#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);
}
Nice, c'est une bonne solution. Il y a cependant deux inconvénients pour autant que je puisse voir. Un mineur, étant que la boîte déroulante de filtre dans la boîte de dialogue ne sera pas remplie avec les types de fichiers autorisés. Cependant, vous pouvez probablement y mettre un texte descriptif. Comme dans mon cas "Fichiers audio". Un inconvénient plus grave est que vous ne pouvez plus utiliser les boîtes de dialogue de fichiers natifs. Ceci est un bouchon de spectacle pour moi et ma solution finale (?) Est d'expédier un fichier mime.types avec mon application, mais je déteste! Si vous ne vous souciez pas du dialogue natif c'est une meilleure solution à mon avis. Par conséquent, je le marque comme une réponse correcte. – Mathias
Oui, les boîtes de dialogue de fichiers natifs ont leurs avantages et leurs problèmes. Ils sont plus fiables que les boîtes de dialogue Qt (en particulier avec les partages réseau et les favoris), mais vous ne pouvez pas personnaliser le texte des boutons et d'autres choses comme vous pouvez le faire avec les boîtes de dialogue Qt. Filtre déroulant WRT, vous avez raison. Je suis curieux de savoir si les fichiers sont filtrés en fonction de l'extension après la mise en place d'un modèle de proxy, mais qu'ils n'ont pas été testés pour être sûrs. –