我想在QFileDialog匹配的滤光镜有问题的平台上通过声子支持的所有音频文件类型。

1 - 但是我不能够找到Qt的方式在过滤器使用MIME类型。我该怎么办呢?

2 - 或如何可以找到手动mime类型对应的文件扩展名?该解决方案应当基于Qt的,或至少是跨平台的和到处支持Qt是

选项之一是我的优选方案,但是选项2会做以及..

以下是说明我的问题的短代码:

#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);
}
有帮助吗?

解决方案

可以在MIME类型与过滤 QFileDialog::setProxyModel 。你可能会想子类 QSortFilterProxyModel 和覆盖的 filterAcceptsRow ,以便它接受只有当该文件是适当的MIME类型的。希望这个时候有一个简单的方法来识别文件的MIME类型,将作为一个很好的解决方案的约束。

其他提示

呼叫availableMimeTypes()对声子的后端,然后依次通过所得到的MIME类型列表,并为每一个枚举通过QMimeType::extensions()返回的扩展。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top