2010年04月12日

QTextCodec の初期化ではまりました。

Windows で Qt アプリを書いているのですが、Qt の文字列クラス QString はデータを Unicode で持っているので、例えばダイアログから取得した文字列を外部の API や関数に渡す際には Shift-JIS などに変換する必要があります。

# Unicode や Shift-JIS という用語はあいまいなので良くないのですが… 簡単のため。本当は ISO/IEC 10646 や Windows-31J (旧 cp932) と書くべきだと思います。

QTextCodec クラスを使えば良いだけなのですが、なぜか Codec が初期化できなくて苦労しました。(QTextCodec::codecForName("Shift-JIS") が NULL を返す。)



原因は、日本語のコーデック (qjpcodecs) がプラグインになっていたため、プラグインを読み込む (qjpcodecs は静的プラグインなので、静的リンクされるのですが) 必要があったのでした。

Windows 環境でしか試してないのですが、他の環境でも同じなのでしょうか ?

なかなか気が付きにくいのではないかと思います。

/* jpcodec.cpp */
#include <QTextCodec>
/* 以下の 2 行が無いとエラーになる */
#include <QtPlugin>
Q_IMPORT_PLUGIN(qjpcodecs)
/* リンク時には -L<path/to>\qt\4.3.2\win32\plugins\codecs -lqjpcodecs -lqtcore などが必要。 */

int main()
{
    QTextCodec *sjis = QTextCodec::codecForName("Shift-JIS");

    if (!sjis) {
        fprintf(stderr, "error\n");
        return -1;
    }
    return 0;
}


トラックバックURL

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード