How to convert QString to std::string?
我正在尝试这样做:
1 2 3 | QString string; // do things... std::cout << string << std::endl; |
但是代码不能编译。如何将qstring的内容输出到控制台(例如出于调试目的或其他原因)?如何将
型
您可以使用:
1 2 3 | QString qs; // do things std::cout << qs.toStdString() << std::endl; |
这是
型
在将
所以最好是:
1 2 3 4 5 6 7 | QString qs; // Either this if you use UTF-8 anywhere std::string utf8_text = qs.toUtf8().constData(); // or this if you're on Windows :-) std::string current_locale_text = qs.toLocal8Bit().constData(); |
如果指定codec,建议的(接受的)方法可能有效。
参见:http://doc.qt.io/qt-5/qstring.html tolatin1
型
如果您的最终目标是将调试消息发送到控制台,则可以使用qdebug()。
你可以用像,
将内容打印到控制台的
这种方法比仅仅为了调试消息而将其转换为
型
1 2 | QString qstr; std::string str = qstr.toStdString(); |
号
但是,如果使用qt:
1 2 | QTextStream out(stdout); out << qstr; |
型
最好的做法是重载operator< 。1
2
3std::ostream& operator<<(std::ostream& str, const QString& string) {
return str << string.toStdString();
}
型
提议的替代方案:
1 2 | QString qs; std::string current_locale_text = qs.toLocal8Bit().constData(); |
。
可以是:
1 2 | QString qs; std::string current_locale_text = qPrintable(qs); |
。
参见qprintable documentation,一个从qtglobal传递const char*的宏。
型
最简单的方法是
型
你可以用这个;
1 2 | QString data; data.toStdString().c_str(); |
型
1 2 | QString data; data.toStdString().c_str(); |
。甚至可以在xstring中对vs2017编译器抛出异常
1 2 3 4 | ~basic_string() _NOEXCEPT { // destroy the string _Tidy_deallocate(); } |
正确的方法(安全-无例外)是如何解释上述从Artyom
1 2 3 4 5 6 7 | QString qs; // Either this if you use UTF-8 anywhere std::string utf8_text = qs.toUtf8().constData(); // or this if you're on Windows :-) std::string current_locale_text = qs.toLocal8Bit().constData(); |
。
型
试试这个:
1 2 3 4 | #include <QDebug> QString string; // do things... qDebug() <<"right" << string << std::endl; |
号