Я пытался сделать так:
QString string;
// делаю так ...
std::cout << string << std::endl;
Но проблема, код не собирается.Как выводить содержимое qstring в консоль (например, для целей отладки или по другим причинам)? Как преобразовать QString в std::string?
Этот вопрос, перевод вопроса: https://stackoverflow.com/questions/4214369/how-to-convert-qstring-to-stdstring
Одна вещь которую надо помнить, при преобразовании 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()
.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Почему содержимое вектора недоступно в дебаге? Вывод вектора корректный
макс элемент нашел, а как переприсвоить не знаю
//Из текстового файла вводится символьная строка, состоящая из чисел, //разделенных пробеломСоставить программу, которая вводит строку, организует...