c++ qt mfc atl cstring

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?