Quiero que el filtro en un QFileDialog coincida con todos los tipos de archivos de audio admitidos por Phonon en la plataforma en cuestión.Filtro QFileDialog de mime-types
1 - Sin embargo, no puedo encontrar una forma en Qt para usar tipos de mime en un filtro. ¿Cómo puedo hacer eso?
2 - ¿O cómo puedo encontrar manualmente las extensiones de archivo correspondientes para los tipos mimet? La solución debe estar basada en Qt, o al menos ser multiplataforma y admitida en todo lugar donde Qt lo esté.
primera opción es mi solución preferida, sin embargo la segunda opción va a hacer, así ..
A continuación se presenta un breve código que describe mi 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);
}
Bien, esta es una buena solución. Sin embargo, hay dos inconvenientes por lo que puedo ver. Menor, ya que el cuadro desplegable del filtro en el cuadro de diálogo no se completará con los tipos de archivo permitidos. Sin embargo, probablemente solo puedas poner un texto descriptivo allí. Como en mi caso "Archivos de audio". Un inconveniente más grave es que ya no puede usar los diálogos de archivos nativos. Esto es un obstáculo para mí y mi solución final (?) Es enviar un archivo mime.types con mi aplicación, ¡pero lo odio! Si no te importa el diálogo nativo, esta es una mejor solución en mi opinión. De ahí que lo marque como una respuesta correcta. – Mathias
Sí, los diálogos de archivos nativos tienen sus beneficios y sus problemas. Son más confiables que los diálogos de Qt (especialmente con recursos compartidos de red y favoritos), pero no se puede personalizar el texto del botón y otras cosas como se puede con los cuadros de diálogo de Qt. Filtro desplegable WRT, tienes razón. Tengo curiosidad si los archivos se filtran en función de la extensión después de que se implementa un modelo de proxy, pero no se han probado para saberlo con certeza. –