鉴于项目的编码可能是 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
. The CString
class 可以被视为简单的 C 风格字符串;即字符数组。您所要做的就是将其投射到LPCTSTR
.
一旦你有了这个,你只需要创建QString
对象取决于您的字符是否CString
属于类型char
or 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
Edit:正如评论中所建议的,您必须禁用“Treatwchar_t
作为项目属性中的内置类型`,以使上述代码在 Visual Studio 中正确链接(source).
For _UNICODE
,我相信你也可以使用fromUtf16功能:
CString c(_T("SOME TEXT"));
QString q = QString::fromUtf16(c.GetBuffer(), c.GetLength());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)