5

問題のプラットフォームで Phonon がサポートするすべてのオーディオ ファイル タイプに QFileDialog のフィルタを一致させたいと考えています。

1 - ただし、Qt でフィルターで MIME タイプを使用する方法を見つけることができません。どうやってやるの?

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

2 に答える 2

0

Phonon バックエンドで呼び出しavailableMimeTypes()、結果の MIME タイプ リストをループし、それぞれに対して によって返された拡張子を列挙しQMimeType::extensions()ます。

于 2010-04-08T17:41:18.397 に答える
0

を使用して、MIME タイプでフィルタリングできますQFileDialog::setProxyModel。ファイルが適切な MIME タイプの場合にのみ受け入れるように、おそらくサブクラス化QSortFilterProxyModelしてオーバーライドする必要があります。filterAcceptsRowこれが、ファイルの MIME タイプを識別する簡単な方法と結び付けられている場合、適切な解決策として役立つことを願っています。

于 2010-04-14T18:22:49.830 に答える