Вам не нужно промежуточное преобразование в 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());