2017年3月21日 星期二

Qt中文亂碼問題

Problem

   若想直接在Qt上打中文,常會遇到亂碼問題。嘗試了網路上蠻多方法都失敗,本文總結出解決亂碼的方法。

Solution

情境1

想在 Source Code (*.cpp) 裡面寫中文;但當其顯示在UI上時,卻呈現亂碼。
如:
QString newInfo("你好");
this->displayPanel->myQLabel->setText(newInfo);

解決方法請見這篇文章


情境2

如果有一已編譯好的函示庫(假設為輸入員工ID,則該函示庫會輸出員工姓名),該函示庫的輸出型態為std::string,其編碼為BIG-5(以下皆假設在Windows作業系統下)。若欲將此型態轉為QString,則需以下面方式即可:
namespace QtExtensions
{
    QString ConvertToUTF8(const std::string& big5FormatString_)
    {
        QString result = QString::fromLocal8Bit(big5FormatString_.c_str());

        return result;
    }
}//End of namespace

而在使用時:
std::string GetStaffName(const std::string& staffID_);

int main()
{
    std::string staffNameInBig5Format = ::GetStaffName("01234567");
    QString staffNameInUTF8 = QtExtensions::ConvertToUTF8(staffNameInBig5Format);
    staffInfoWindow.SetStaffName(staffNameInUTF8);
}

沒有留言:

張貼留言