Hay*_*tuk 5 c++ qt mfc atl cstring
鉴于项目的编码可能是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
Run Code Online (Sandbox Code Playgroud)
你认为它有效吗?还有其他想法吗?
您不需要将中间转换为a 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
Run Code Online (Sandbox Code Playgroud)
编辑:正如评论中所建议的那样,您必须wchar_t在项目的属性中禁用" 视为内置类型",以使上述代码在Visual Studio(源代码)中正确链接.
因为_UNICODE,我相信你也可以使用这个fromUtf16功能:
CString c(_T("SOME TEXT"));
QString q = QString::fromUtf16(c.GetBuffer(), c.GetLength());
Run Code Online (Sandbox Code Playgroud)