QTは中国語の問題を表示します


(本文の内容は参考にしたhttps://www.cnblogs.com/xgponder/p/4744168.html).
QTの開発をするのは簡単に中国語の文字化けしの問題に出会うことができて、それではこの問題はどのように発生して、またどのように解決しますか?
まず1つの現象を説明します:手に2つの先人のプログラムがあって、1つの部分のコードは以下の通りです:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));    
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));    
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QMessageBox::about(NULL,QObject::tr(" "),QObject::tr(" , !"));

もう1つのコードは次のとおりです.
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));    
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));    
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
QMessageBox::about(NULL,QObject::tr(" "),QObject::tr(" , !"));

実際には、この2つのプログラムが実行された後のプロンプトボックスの中国語は正常であり、1つ目のプログラムコードをgb 18030、2つ目のプログラムがutf 8に変換すると、2つのプログラムが実行された後のプロンプトボックスが文字化されてしまうので、非常に興味深い.
検査の結果、第1のプログラムの符号化方式はUTF 8であり、第2のプログラムの符号化方式はgb 18030であることが分かった.これはコードの符号化方法と一致していることがわかります.ここでは、QTでQStringがUnicodeを使用して符号化されていることに言及し、中国語を表示するには、まず中国語をUnicode符号化に変換する必要があります.この时問題が来て、あなたのソースコードの符号化フォーマットは何ですか?それはあなたのソースコードの符号化フォーマットを知ってからあなたに変換することができます.したがって、QTextCodec::setCodecForTr(QTextCodec::codecForName(「UTF-8」)という言葉は、QTがtrで囲まれた文字の符号化方式を教えてくれるものであり、ここでの符号化方式はあなたのソースコードの符号化方式と一致する必要がある.
なお、上記の関数はQT 4でしか使用できません.現在、QT 5ではインタフェースがキャンセルされています.