簡體   English   中英

如何將 ATL/MFC CString 轉換為 QString?

[英]How do I convert an ATL/MFC CString to a QString?

鑒於項目的編碼可能是 Unicode(但不確定)將 ATL::CString 轉換為 QString 的最佳方法是什么?

我想到的是這樣的:

CString c(_T("SOME_TEXT"));
//...
std::basic_string<TCHAR> intermediate((LPCTSTR)c);
QString q;

#ifdef _UNICODE 
q = QString::fromStdWString(intermediate);
#else
q = QString::fromStdString(intermediate);
#endif

你認為它有效嗎? 還有其他想法嗎?

您不需要中間轉換為std::string CString class 可以被視為簡單的 C 風格字符串; 也就是一個字符數組。 您所要做的就是將其轉換為LPCTSTR

一旦你有了它,你只需要根據CString中的字符是char還是wchar_t類型來創建QString object 。 對於前者,您可以使用QString的標准構造函數之一,對於后者,您可以使用fromWCharArray function

類似於以下代碼(未經測試,我不再安裝 Qt):

CString c(_T("SOME_TEXT"));
QString q;

#ifdef _UNICODE 
q = QString::fromWCharArray((LPCTSTR)c, c.GetLength());
#else
q = QString((LPCTSTR)c);
#endif

編輯:正如評論中所建議的,您必須在項目的屬性中禁用“將wchar_t視為內置類型”,以使上述代碼在 Visual Studio( 源代碼)中正確鏈接。

對於_UNICODE ,我相信您也可以使用fromUtf16 function

CString c(_T("SOME TEXT"));
QString q = QString::fromUtf16(c.GetBuffer(), c.GetLength());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM