3

独自のコーデック、つまり のサブクラスを作成する必要がありますQTextCodec。そして、それを介して使用したいのですがQTextCodec::codecForName("myname");
、サブクラスだけでは不十分です。QTextCodec::availableCodecs()私のコーデック名が含まれていません。

QTextCodec のドキュメントは、カスタム コーデックの適切な登録の領域をカバーしていません。

独自のコーデック クラスの作成

QTextCodec サブクラスを作成することで、新しいテキスト エンコーディングのサポートを Qt に追加できます。

純粋仮想関数はエンコーダーをシステムに記述し、コーダーは必要に応じて QTextStream でサポートされているさまざまなテキスト ファイル形式で使用され、X11 ではロケール固有の文字の入出力に使用されます。

Qt に別のエンコーディングのサポートを追加するには、QTextCodec のサブクラスを作成し、以下の表にリストされている関数を実装します。
name()
aliases()
mibEnum()
convertToUnicode()
convertFromUnicode()

コーデック クラスをプラグインとして利用できるようにした方が便利な場合があります。詳細については、Qt プラグインの作成方法を参照してください。

そこで、プラグインの方向性を少し掘り下げてみました。しかし、プラグインを使用して別のプロジェクトを作成したくありません。同じプロジェクト内でプラグインを宣言することは可能ですか?

または、コーデックを QTextCodec に登録する直接的な方法はありますか? これは好ましいことです。

4

1 に答える 1

5

qtextcodex.cpp によると、新しいコーデックは独自のコンストラクターによって登録済みコーデックのコレクション (*static QList all ) に追加されます。そのため、コーデック クラスのインスタンスを作成するとうまくいくはずです。以下のコードは私にとってはうまくいきました:

QMyCodec myCodec;

foreach (QByteArray codecName,  QTextCodec::availableCodecs())
{
    QString codecNameStr(codecName);
    qDebug() << codecNameStr;
}

QTextCodec* codec = QTextCodec::codecForName("MyNewCodec");
if (codec)
{
    qDebug() << "found ";
    qDebug() << codec->name() << '\n';
}

QTextCodec::availableCodecs が返されました:

「MyNewCodec」
「システム」
「roman8」「hp-roman8」
「csHPRoman8」…

QTextCodec::codecForName がコーデック クラスへのポインタを返しました

これが役に立てば幸いです、よろしく

于 2009-12-31T19:29:58.013 に答える