Конвертировать QString в LPTSTR, появляется только первый символ

Я пытаюсь преобразовать следующее QString :

QString nom, prenom, promo;
...
QString modelName = nom + "_" + prenom + "_" promo;

в LPTSTR,

До сих пор я использовал это:

LPTSTR mm = (LPTSTR) modelName.utf16();

Но LPTSTR возвращается содержит только первый символ QString, Я пробовал много методов, в том числе проходя через char *, но ничего не получалось.

Что я должен сделать, чтобы получить полную строку QString в LPTSTR?

1

Решение

Если LPTSTR mm = "TEST CODE" хорошо работает, то в вашем проекте sizeof(TCHAR)==1, Схема памяти с прямым порядком байтов для строки в кодировке ascii UTF16:

xx 00 xx 00 xx 00 xx 00 ...

Вот почему с одним байтом TCHAR, ваша строка UTF-16 интерпретируется как строка из одного символа. Первый нулевой байт завершает его.

Есть два решения этой проблемы:

  1. Использовать UTF-16 TCHARнужно определить UNICODE для всего проекта. Вы можете добавить

    DEFINES += UNICODE
    

    в файл проекта qmake или добавьте

    #define UNICODE
    

    в первой строке вашего кода, в каждом заголовке и файле .cpp.

  2. Если вы действительно хотите использовать локально закодированный, байтовый TCHAR, то вам нужно получить их следующим образом:

    QString modelName = ...;
    QByteArray modelNameLocal = modelName.toLocal8Bit();
    LPTSTR mm = (LPTSTR)modelNameLocal.data();
    

    mm значение будет оставаться в силе до тех пор, пока modelNameLocal находится в сфере. Вы должны быть осторожны, чтобы обеспечить mm используется, базовый байтовый массив также должен существовать.

2

Другие решения


По вопросам рекламы [email protected]