Я пытаюсь преобразовать следующее QString
:
QString nom, prenom, promo;
...
QString modelName = nom + "_" + prenom + "_" promo;
в LPTSTR
,
До сих пор я использовал это:
LPTSTR mm = (LPTSTR) modelName.utf16();
Но LPTSTR
возвращается содержит только первый символ QString
, Я пробовал много методов, в том числе проходя через char *
, но ничего не получалось.
Что я должен сделать, чтобы получить полную строку QString в LPTSTR?
Если LPTSTR mm = "TEST CODE"
хорошо работает, то в вашем проекте sizeof(TCHAR)==1
, Схема памяти с прямым порядком байтов для строки в кодировке ascii UTF16:
xx 00 xx 00 xx 00 xx 00 ...
Вот почему с одним байтом TCHAR
, ваша строка UTF-16 интерпретируется как строка из одного символа. Первый нулевой байт завершает его.
Есть два решения этой проблемы:
Использовать UTF-16 TCHAR
нужно определить UNICODE
для всего проекта. Вы можете добавить
DEFINES += UNICODE
в файл проекта qmake или добавьте
#define UNICODE
в первой строке вашего кода, в каждом заголовке и файле .cpp.
Если вы действительно хотите использовать локально закодированный, байтовый TCHAR
, то вам нужно получить их следующим образом:
QString modelName = ...;
QByteArray modelNameLocal = modelName.toLocal8Bit();
LPTSTR mm = (LPTSTR)modelNameLocal.data();
mm
значение будет оставаться в силе до тех пор, пока modelNameLocal
находится в сфере. Вы должны быть осторожны, чтобы обеспечить mm
используется, базовый байтовый массив также должен существовать.