問題解決:對話框的中文字符串【亂碼】 (error: C2001: 常量中有換行符)
假設編譯環境:QT5+vs2015
項目配置:
默認編碼:UTF-8
UTF-8 BOM: 目前存在了則保留
如果你在使用VS2008(需要打補丁)、VS2010、VS2013、VS2015(未安裝Update2),或者你的源碼需要兼容這些編譯器,當你在Qt5的C++源文件內使用中文時,你需按以下步驟操作。(不止是中文,其實你完全可以在代碼中使用日韓法俄語等等各國語言)
1. 源文件保存爲帶BOM的UTF-8格式(推薦轉換軟件coolEdit)
如果你要支持這些VS版本,且需要跨其他平臺,保存爲帶BOM的UTF-8是必不可少的。
2. 而後,源碼中的所有字符串常量使用 QStringLiteral 宏進行包裹,如:
QString s1 = QStringLiteral("中國");
但是如果,除了寬字符串外,你還需要使用窄字符串,比如
QString s2 = tr("中國");
QByteArray s3 = "中國";
const char * s4 = "中國";
edit.setText("中國");
那麼,你需要:
1. Qt5要求窄字符串執行字符集爲 UTF8
在包含文件或CPP文件添加下面3行代碼
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
2. [MSVC] 如果你不在用MSVC,請跳過該步驟
如果你在使用MSVC2005或MSVC2012,請換用其他版本的MSVC
如果你在使用MSVC2008,請升級到最新的SP1,並安裝 KB980263 補丁
如果你在使用MSVC2010、MSVC2013或更新版本,本步驟不需要額外操作
具體細節,請參考 http://blog.csdn.net/dbzhang800/article/details/7540905