Как конвертировать QString в LPCSTR (Unicode) - PullRequest
2 голосов
/ 26 марта 2011

как я могу преобразовать QString в LPCSTR?

Как мне это сделать, если #ifdef UNICODE определен, а когда нет?

Большое спасибо:)

Ответы [ 4 ]

10 голосов
/ 26 марта 2011

Я думаю:

QString str("ddddd");
LPCSTR lstr = str.toStdString().c_str();
2 голосов
/ 28 марта 2011

QString всегда может содержать Unicode;LPCSTR никогда не бывает Unicode.Это означает, что вам нужно подумать, что делать с персонажами, которые не подходят.Это не вопрос «какой метод использовать», а вопрос разработки.

Вполне возможно, что в вашем конкретном случае вы абсолютно точно знаете, что QString содержит только символы из вашего локального «ANSI»кодовая страница (также известная как ACP).В этом случае правильная функция - QString::toLocal8Bit ().

. В качестве альтернативы вы можете знать, что QString содержит только символы из Latin1 (ISO 8859-1).В этом случае правильная функция - QString::toLatin1().

. Вы можете попытаться вызвать QString::toUtf8().Это всегда будет создавать действительный байтовый массив, даже если QString содержал все символы Unicode.Однако формально вы не можете указать на него LPCSTR: UTF-8 не является допустимой кодовой страницей ACP.И, по-видимому, вы хотите, чтобы этот LPCSTR передавался другой функции вне вашего контроля.Вполне вероятно, что функция не будет ожидать UTF-8.Если бы он ожидал Unicode вообще, это заняло бы LPCWSTR.

0 голосов
/ 18 марта 2013

Я нашел следующее решение из здесь , и оно работает для меня безупречно:

void fooSub(LPSTSTR X); // this is our function :-)

foo()
{
    QString text;
    if(sizeof(TCHAR) == 1)
        fooSub((LPCSTR)text.toLocal8Bit().constData()); // here you have to check, how to convert, you could also use utf8(), ...
    else
        fooSub((LPCWSTR)text.utf16());
}
0 голосов
/ 26 марта 2011
LPCSTR == const char *

это не Unicode, тогда

LPCSTR s = (const char *) qtString;

...