如何将ATL / MFC CString转换为QString?

时间:2011-06-02 14:23:22

标签: 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

你觉得它有效吗?还有其他想法吗?

1 个答案:

答案 0 :(得分:7)

您不需要将中间转换为std::string。可以将CString类视为简单的C风格字符串;也就是说,一个字符数组。您所要做的就是将其投射到LPCTSTR

完成后,您只需创建QString对象,具体取决于CString中的字符是char还是wchar_t。对于前者,您可以使用standard constructors for 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中正确链接工作室(source)。

对于_UNICODE,我相信您也可以使用fromUtf16 function

CString c(_T("SOME TEXT"));
QString q = QString::fromUtf16(c.GetBuffer(), c.GetLength());