Как преобразовать QString в std::string?

214
24 июня 2018, 19:40

Я пытался сделать так:

QString string;
// делаю так ...
std::cout << string << std::endl;

Но проблема, код не собирается.Как выводить содержимое qstring в консоль (например, для целей отладки или по другим причинам)? Как преобразовать QString в std::string?

Этот вопрос, перевод вопроса: https://stackoverflow.com/questions/4214369/how-to-convert-qstring-to-stdstring

Answer 1

Одна вещь которую надо помнить, при преобразовании QString в std::string это то что QString кодируется в кодировке UTF-16, а std :: string ... Может иметь любые кодировки.

Вот лучшие способы:

QString qs;
// можно использовать такой способ если пользуетесь UTF-8 в любом месте
std::string utf8_text = qs.toUtf8().constData();
// или таким способом если вы в Windows :-)
std::string current_locale_text = qs.toLocal8Bit().constData();

Предлагаемый (принятый) метод может работать, если вы укажете кодек.

Смотри: http://doc.qt.io/qt-5/qstring.html#toLatin1

Ты можешь использовать:

QString qs;
// делай так
std::cout << qs.toStdString() << std::endl;

Вот справочная документация для QString.

Если ваша конечная цель - получить отладочные сообщения на консоли, вы можете использовать qDebug ().

Вы можете использовать,

#include <QDebug> // в заголовке файла (.cpp либо .h)
qDebug() << "строка"; // выводим надпись на консоль
QString str = "строка";
qDebug() << str; // выводим надпись на консоль

Этот способ лучше, чем преобразование его в std :: string , но только для отладки сообщений (либо использовать в создаваемом приложении как реперные точки(так сказать такой "полудебагер") ).

qDebug() для отладки сообщений намного лучше, потому что он поддерживает больше типов Qt

QString qstr;
std::string str = qstr.toStdString();

Однако, если вы используете Qt:

QTextStream out(stdout);
out << qstr;

Лучший способ это перегрузить оператор << ,так что бы QString можно передать как тип в любую библиотеку.

std::ostream& operator<<(std::ostream& str, const QString& string) {
    return str << string.toStdString();
}

Альтернатива предлагаемому:

QString qs;
std :: string current_locale_text = qs.toLocal8Bit (). constData ();

еще может быть:

QString qs;
std :: string current_locale_text = qPrintable (qs);

Смотри документацию qPrintable, макрос предоставляющий const char * из QtGlobal.

Простейший способ ,это QString::toStdString().

Вы можете использовать, это :

QString data;
data.toStdString().c_str();

Примечания переводчика : сам использую для вывода в консоль qDebug().

READ ALSO
Почему вектор не доступен в дебаге

Почему вектор не доступен в дебаге

Почему содержимое вектора недоступно в дебаге? Вывод вектора корректный

181
почему компилятор ругается на fscanf? Выдает ошибку clang: error: linker command failed with exit code 1 (use -v to see invocation)

почему компилятор ругается на fscanf? Выдает ошибку clang: error: linker command failed with exit code 1 (use -v to see invocation)

//Из текстового файла вводится символьная строка, состоящая из чисел, //разделенных пробеломСоставить программу, которая вводит строку, организует...

211