c++ - ¿Cómo convierto un ATL/MFC CString en un QString?
cstring access (1)
No necesita la conversión intermedia a std::string
. La clase CString
se puede tratar como una simple cadena de estilo C; es decir, una matriz de caracteres. Todo lo que tienes que hacer es lanzarlo a un LPCTSTR
.
Y una vez que tenga eso, solo necesita crear el objeto QString
dependiendo de si los caracteres en su CString
son de tipo char
o wchar_t
. Para el primero, puede usar uno de los constructores estándar para QString
, y para el último, puede usar la función fromWCharArray
.
Algo así como el siguiente código (no probado, ya no tengo instalado Qt):
CString c(_T("SOME_TEXT"));
QString q;
#ifdef _UNICODE
q = QString::fromWCharArray((LPCTSTR)c, c.GetLength());
#else
q = QString((LPCTSTR)c);
#endif
Editar: como se sugiere en los comentarios, debe deshabilitar "Tratar wchar_t
como un tipo incorporado" en las Propiedades de su proyecto para que el código anterior se vincule correctamente en Visual Studio ( fuente ).
Para _UNICODE
, creo que también podría usar la función fromUtf16
:
CString c(_T("SOME TEXT"));
QString q = QString::fromUtf16(c.GetBuffer(), c.GetLength());
Dado que la codificación del proyecto probablemente sea Unicode (pero no está seguro), ¿cuál es la mejor forma de convertir ATL :: CString a QString?
Lo que he pensado es esto:
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
¿Crees que funciona? ¿Alguna otra idea?