WHAT'S NEW?
Loading...

Qt5.1+msvc2012:解決中文亂碼的問題

最近使用Qt5.1發現中文亂碼的問題已經不能用QTextCodec::setCodecForTr()來解決,因為Qt5官方認為此函數被濫用,因此Qt 5決定使用UTF-8為預設值.編譯器使用MINGW,應該不會出現中文亂碼問題.

為什麼使用UTF-8?

其實最近我們公司開發國際開源程式碼,又加上我們在VC2008上開發我們的Qt 5程式碼,因此為了考量不同國家有不同編碼和不同作業系統,因此決定使用UTF-8為我們程式碼的編碼.
然而微軟VC2008會與UTF-8在衝突,因此我在VC2008當然編譯失敗,我的作法直接將中文轉成UTF-8,然後用QString::fromUtf8(),先暫時解決中文亂碼問題.而有人測試VC2010若加上BOM可以成功編譯,因此加BOM選項可以使VC2010成功.


若你最近下載之前在如何讓Qt 5.1+MVC2012的DEBUG運作提到的qt-windows-opensource-5.1.1-msvc2012-x86-offline,因為編譯器為msvc2012,所以請做以下兩點確認:
  1. 請將你的程式原始碼改成UTF-8.(雖然Qt5是默認設置,請再次確認)
  2. 利用QStringLiteral這個宏(macro)產生中文字符,如QStringLiteral("台灣");.

以下的Demo將Qt入門篇(2):QCheckBox&QComboBox實作程式碼QComboBox的內容改成中文.





設定教程

  1. 在Qt Creator的工具列,選擇[Tools]後按下[Options]進入Qt設定介面

  2. 圖一.進入Qt設定介面


  3. 其次,在選項介面上選擇[Text Editor]後,切換到[Behavior],最後在File Encoding的Default encoding選擇[UTF-8]和UTF-8 BOM選擇[Keep If Already Present], 完成後按下[OK]鍵.

  4. 圖二.Qt設定介面


  5. (Optional )再接著,在原代碼按下滑鼠右鍵後,點選[ADD UTF-8 BOM on Save](若你使用VS2010開發Qt 5原始碼,你才需要加BOM)

  6. 圖三.使原代碼帶有BOM的UTF-8


  7. 最後, 利用QStringLiteral產生中文字符,如以下的程式碼範例.
  8. cityname<<QStringLiteral("基隆市")<<QStringLiteral("台北市")<<QStringLiteral("新北市");
    
延伸閱讀:
1.Qt入門篇(2):QCheckBox&QComboBox實作

0 comments:

張貼留言