質問

私はQFileDialog内のフィルタは、問題のプラットフォーム上でのフォノンでサポートされているすべてのオーディオファイルタイプを一致させたい。

1 - しかし、私はフィルタでMIMEタイプを使用するようにQtの方法を見つけることができないのです。私はそれを行うことができますどのように?

2 - またはどのように私は手動でMIMEタイプに対応するファイル拡張子を見つけることができますか?溶液は、Qtのベース、または少なくともクロスプラットフォームであり、どこでもQtのサポートすべきである。

オプション1は私の好みのソリューションです、しかし、オプション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);
}
役に立ちましたか?

解決

あなたは QFileDialog::setProxyModel のでMIMEタイプにフィルタリングすることができます。おそらくたいと思うのサブクラス QSortFilterProxyModel とオーバーライド<のhref = "のhttp:/ /doc.trolltech.com/4.6/qsortfilterproxymodel.html#filterAcceptsRow」のrel = 『nofollowをnoreferrer』> filterAcceptsRow のようにファイルが適切なMIMEタイプである場合にのみ、それは受け入れること。うまくいけば、ファイルのMIMEタイプを識別するための簡単な方法で結合したとき、これは、良い解決策として機能します。

他のヒント

コールavailableMimeTypes()によって返さ拡張得られたMIMEタイプのリストを通ってそれぞれ列挙するためのフォノンにQMimeType::extensions()バックエンドと、ループ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top