私はC++で多数のQtアプリケーションを開発していますが、それらはすべて、Qtを使用する一般的な機能のためにいくつかのモジュール(変換ユニット)を使用しています。
C文字列(暗黙の変換)またはC ++文字列オブジェクト(fromStdString())をQStringオブジェクトに変換するときはいつでも、元のデータはUTF-8でエンコードされ、その逆も同様です(toStdString())。
デフォルトはLatin-1であるため、コーデックを「手動で」(すべてのプログラムのinitプロシージャで)UTF-8に設定する必要があります。
QTextCodec :: setCodecForCStrings(QTextCodec :: codecForName( "utf8"));
すべてのモジュールにinitプロシージャがあるわけではありません。クラスを含むものはそうです(私はこの行をクラスコンストラクターに入れることができます)が、いくつかのモジュールはたくさんの関数を持つ名前空間を含んでいます。したがって、setCodecForCStrings()の場所はありません。暗黙的に(モジュールの1つから)QStringから/に変換するときはいつでも、メインプログラムのinitプロシージャによってすでに設定されているコーデックに依存しています。これはかなり悪い解決策のようです。
モジュールでコーデックをUTF-8に設定する信頼できる方法はありますか、それとも(少なくとも私のモジュールでは)暗黙の変換をまったく使用せず、std :: string(q q.toStdString()の代わりに.toUtf8()。constData())?