2

したがって、この関数の結果を一意にする必要があります。

私の仕事は簡単です。テキスト処理アプリケーションのエンコーディング選択ダイアログを表示したいだけです。私の最初の素朴な解決策は次のようになります。

QList<QByteArray> encodings = QTextCodec::availableCodecs ();
QSet<QTextCodec*> unique_codecs;
unique_codecs.insert (QTextCodec::codecForName ("autodetect"));
unique_codecs.insert (QTextCodec::codecForName ("system"));
foreach (QByteArray e, encodings)
{
    if (QTextCodec* c = QTextCodec::codecForName (e))
    {
        if (!unique_codecs.contains (c))
        {
            m_encodings.append (e);    // QStringList to store encodings
            unique_codecs.insert (c);
        }
    }
}

他にアイデアはありますか?

4

2 に答える 2

3

MIB のリストを返すメソッドがありavailableMibs()ます。これはコーデックの一意の ID であり、重複はありません。QTextCodec::codecForMib(int)その後、問題のコーデックを取得できます。

foreach (int mib, QTextCodec::availableMibs()) {
    m_encodings << QTextCodec::codecForMib(mib)->name();
}

私のマシンでは、111 の利用可能な MIB と 804 の利用可能なコーデック名を取得します

于 2013-10-26T17:16:38.170 に答える
1

質問への回答 (availableMibs() を使用して一意のアイテムを含むリストを作成する方法) が与えられたので、これに追加します - なぜ重複があったのか。

QTextCodec::availableCodecs() は、すべての一般的なエイリアスを含むコーデックのリストを返します。たとえば、コーデック cp-1252 は、cp-1252 と windows-1252 の 2 つのエイリアス (存在する場合はそれ以上) として存在します。ユーザーが自動項目フィルタリングを備えたコンボのようなリストを介してエンコーディングを選択する必要がある場合に役立ちます。cp-1252 または windows-1252 と入力すると、別のエイリアスを覚えていなくても同じ結果が得られます。

于 2013-10-27T08:53:13.417 に答える