Ответ 1
См. здесь. Как преобразовать QString в char * и наоборот?
Чтобы преобразовать QString в char *, тогда вам сначала нужно получить latin1 представление строки вызов toLatin1() на нем, который будет верните QByteArray. Затем данные вызова() на QByteArray, чтобы получить указатель на данные, хранящиеся в массиве байтов. Видеть документация:
http://qt.nokia.com/doc/qstring.html#toLatin1 http://qt.nokia.com/doc/qbytearray.html#data
См. следующий пример для Демонстрация:
int main(int argc, char **argv) { QApplication app(argc, argv); QString str1 = "Test"; QByteArray ba = str1.toLatin1(); const char *c_str2 = ba.data(); printf("str2: %s", c_str2); return app.exec(); }
Обратите внимание, что необходимо сохранить bytearray, прежде чем вы вызовете данные() это вызов, например, следующий
const char *c_str2 = str2.toLatin1().data();
приведет к сбою приложения в качестве QByteArray не был сохранен и следовательно, больше не существует
Чтобы преобразовать char * в QString, вы может использовать конструктор QString, который принимает QLatin1String, например:
QString string = QString(QLatin1String(c_str2)) ;
См. документацию:
Конечно, я обнаружил, что есть другой путь от этого предыдущего SO-ответа:
QString qs;
// Either this if you use UTF-8 anywhere
std::string utf8_text = qs.toUtf8().constData();
// or this if you on Windows :-)
std::string current_locale_text = qs.toLocal8Bit().constData();