考虑到项目的编码可能是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
类可以被视为一个简单的C样式字符串;即字符数组。您所要做的就是将其转换为LPCTSTR
。
一旦有了它,您只需要创建QString
对象,这取决于CString
中的字符类型是char
还是wchar_t
。对于前者,可以使用QString
的标准构造函数之一,对于后者,可以使用fromWCharArray
函数。
类似以下代码(未经测试,我不再安装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
函数:
CString c(_T("SOME TEXT"));
QString q = QString::fromUtf16(c.GetBuffer(), c.GetLength());