Vous n'avez pas besoin de la conversion intermédiaire en std::string
. La classe CString
peut être traitée comme une simple chaîne de style C ; c'est-à-dire, un tableau de caractères. Tout ce que vous avez à faire est de la caster en LPCTSTR
.
Et une fois que vous avez cela, vous avez juste besoin de créer l'objet QString
en fonction que les caractères dans votre CString
sont de type char
ou wchar_t
. Pour les premiers, vous pouvez utiliser l'un des constructeurs standards pour QString
, et pour les seconds, vous pouvez utiliser la fonction fromWCharArray
.
Quelque chose comme le code suivant (non testé, je n'ai plus Qt installé) :
CString c(_T("SOME_TEXT"));
QString q;
#ifdef _UNICODE
q = QString::fromWCharArray((LPCTSTR)c, c.GetLength());
#else
q = QString((LPCTSTR)c);
#endif
Edit : Comme suggéré dans les commentaires, vous devez désactiver "Traiter le wchar_t
comme un type intégré" dans les propriétés de votre projet pour que le code ci-dessus se lie correctement dans Visual Studio (source).
Pour _UNICODE
, je pense que vous pourriez également utiliser la fonction fromUtf16
:
CString c(_T("SOME TEXT"));
QString q = QString::fromUtf16(c.GetBuffer(), c.GetLength());