[英]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.