来自mime类型的QFileDialog过滤器

时间:2010-04-08 12:40:11

标签: qt mime-types file-extension phonon qfiledialog

我希望QFileDialog中的过滤器匹配相关平台上Phonon支持的所有音频文件类型。

1 - 但是我无法在Qt中找到在过滤器中使用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 :(得分:0)

在Phonon后端调用availableMimeTypes(),然后遍历生成的MIME类型列表,并为每个列举QMimeType::extensions()返回的扩展名。

答案 1 :(得分:0)

您可以使用QFileDialog::setProxyModel过滤mime类型。您可能希望子类QSortFilterProxyModel并覆盖filterAcceptsRow,以便仅在文件具有适当的mime类型时才接受。希望这一点,当用一种简单的方法来识别文件的mime类型时,将是一个很好的解决方案。