項目中集成第三方庫,其接口使用 std::wstring;自身業務邏輯基於 Qt,習慣用 QString 處理字符串(如替換、分割、正則等)。需在兩者間高效、無損轉換。
| 轉換方向 | 關鍵函數 | 說明 |
|---|---|---|
std::wstring → QString | QString::fromStdWString() | 靜態工廠方法,直接構造 QString |
QString → std::wstring | QString::toStdWString() | 成員函數,返回標準寬字符串 |
#include <string>
#include <QString>
int main() {
// 1. 初始寬字符串(Windows 路徑含反斜線)
std::wstring wStr = L"C:\\windows\\system32\\hao123\\tianCai\\";
// 2. wstring → QString
QString qStr = QString::fromStdWString(wStr);
// 3. 利用 QString 強大功能:將單反斜線替換為雙反斜線(或正斜線)
qStr.replace(L"/", L"\\\\"); // 注意:C++ 字面量需雙重轉義
// 4. QString → wstring 回傳給第三方庫
wStr = qStr.toStdWString();
// 結果:wStr 變為 L"C:\\\\windows\\\\system32\\\\hao123\\\\tianCai\\\\"
return 0;
}
wchar_t 寬度匹配,避免跨平台亂碼。QString 或 std::wstring 其一,減少來回轉換。fromStdWString 依賴 wstring 內部長度,不要求額外結束符;toStdWString 生成的字符串自帶結束符。// std::string (UTF-8) ↔ QString
QString q = QString::fromUtf8(stdStr.c_str());
std::string s = q.toUtf8().constData();