如何将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
类可以被视为一个简单的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());
相关文章:
- 如何将 CString 转换为字节 [] 数组?
- 如何将CString转换为使用WCHAR的Windows API和自定义函数?
- 将 CString 转换为字符类型
- 将cstring转换为camelcase
- 从 ATL::CString 转换为 C++ 中的字符串
- 将 ATL::CString 转换为 std::vector<unsigned char>
- 将 ATL CString 转换为字符数组
- 如何将 CString 转换或转换为 LPWSTR
- 如何将 CString 转换为 UCHAR 数组
- 将 MFC 的 CString 转换为 ASCII 和 UNICODE 的 int
- 需要将cstring转换为byte*,并需要在c++函数中将其作为i/p参数传递
- 将CString转换为const byte*的Unicode项目
- 我如何将CString转换为BYTE
- 将MFC CString转换为无符号整数
- 隐式将CString转换为char*
- 如何将CString转换为CByteArray
- 如何将ATL/MFC CString转换为QString
- 在mfc中将CString转换为float
- 将宽CString转换为char*
- 如何将CString转换为ofstream