intermediate((LPCTSTR)c);QString q;#i" />

Как преобразовать строку ATL / MFC в строку QString?

c++ qt mfc atl cstring

6517 просмотра

1 ответ

Учитывая кодировку проекта, вероятно, 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

Вы думаете, что это работает? Есть другие идеи?

Автор: Hayri Uğur Koltuk Источник Размещён: 12.11.2019 09:06

Ответы (1)


7 плюса

Решение

Вам не нужно промежуточное преобразование в 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());
Автор: Cody Gray Размещён: 02.06.2011 02:44
Вопросы из категории :
32x32