QFileDialog фильтр из MIME-типов - PullRequest
5 голосов
/ 08 апреля 2010

Я хочу, чтобы фильтр в QFileDialog соответствовал всем типам аудиофайлов, поддерживаемых Phonon на рассматриваемой платформе.

1 - Однако я не могу найти способ использовать в Mt типы mime вфильтр.Как я могу это сделать?

2 - Или как вручную найти соответствующие расширения файлов для mimetypes?Решение должно быть основано на Qt или, по крайней мере, должно быть кроссплатформенным и поддерживаться везде, где есть Qt.

Первый вариант - мое предпочтительное решение, однако второй вариант тоже подойдет.

короткий код, описывающий мою проблему:

#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);
}

Ответы [ 2 ]

0 голосов
/ 14 апреля 2010

Вы можете фильтровать по типам пантомимы с помощью QFileDialog::setProxyModel.Вы, вероятно, захотите создать подкласс QSortFilterProxyModel и переопределить filterAcceptsRow, чтобы он принимал только когда файл имеет соответствующий тип MIME.Надеемся, что это, когда связано с простым способом идентификации типов файлов MIME, послужит хорошим решением.

0 голосов
/ 08 апреля 2010

Вызовите availableMimeTypes() на бэкэнде Phonon, а затем переберите итоговый список MIME-типов и для каждого перечислите расширения, возвращаемые QMimeType::extensions().

...