歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Qt中文亂碼問題解決辦法

Qt中文亂碼問題解決辦法

日期:2017/3/1 10:38:05   编辑:Linux編程

WOWCode的主體部分基本已經完成了,對於我自己來說,其實已經足以應付我的需要了,不過如果發布的話,實在還是拿不出手,因為很多地方還需要完善,一些對我自己來說多余的功能也沒有完成,今天嘗試將程序移植到了另一台機子上,卻出現了中文亂碼問題,記錄之。

也許你在用這個方法實現中文化,但它確實不夠嚴謹

  1. #include <QTextCodec>
  2. int main(int argc, char *argv[])
  3. {
  4. QApplication app(argc, argv);
  5. //設置中文開始
  6. QTextCodec::setCodecForTr(QTextCodec::codecForName(“gb18030″));
  7. //設置中文結束
  8. return app.exec();
  9. }

很多地方都會告訴你,這樣可以實現QT支持中文,包括我看的教程書上也是,他甚至告訴我要支持中文必須加入這段代碼,但我想告訴你,這個辦法是有問題的,而且這個問題還不小!我在兩台同樣是XP系統的機子上移植就出現了中文亂碼問題,而且所有中文都是用了tr()的。所以請別迷信那些教程,實踐才是真理!

你可以嘗試這個方法

  1. #include <QTextCodec>
  2. int main(int argc, char *argv[])
  3. {
  4. QApplication app(argc, argv);
  5. //設置中文開始
  6. QTextCodec *codec = QTextCodec::codecForName(“GB2312″);
  7. QTextCodec::setCodecForLocale(codec);
  8. QTextCodec::setCodecForCStrings(codec);
  9. QTextCodec::setCodecForTr(codec);
  10. //設置中文結束
  11. return app.exec();
  12. }

雖然這個方法看似更為嚴謹,你可以嘗試,不過這麼寫還是會有問題,至少沒有解決我的問題。這也是我網上看到的出現頻率也挺高的方法,不過我想說的是:其實這個辦法治標不治本,因為它後面只是對拓寬對中文支持的范圍,而一般我們都建議把中文寫在tr(“”)裡。

推薦個比較保險的辦法

  1. int main(int argc, char *argv[])
  2. {
  3. QApplication a(argc, argv);
  4. QTextCodec *codec = QTextCodec::codecForName(“System”); //獲取系統編碼
  5. QTextCodec::setCodecForLocale(codec);
  6. QTextCodec::setCodecForCStrings(codec);
  7. QTextCodec::setCodecForTr(codec);
  8. return a.exec();
  9. }

這裡獲取了系統字體編碼,解決了我的問題,個人也覺得這個辦法應該是個不錯的解決方案。

也可能是字體選擇不當造成的亂碼
如果你始終解決不了亂碼問題,可以嘗試設置下字體,但其實是否是字體造成的亂碼的方法很簡單,如果出現的是一個個方塊,便是字體設置不當,否則,優先考慮編碼設置。

Copyright © Linux教程網 All Rights Reserved