aug*_*tin 222 c++ qstring qt type-conversion
我想做这样的事情:
QString string;
// do things...
std::cout << string << std::endl;
Run Code Online (Sandbox Code Playgroud)
但代码不编译.如何将qstring的内容输出到控制台(例如出于调试目的或其他原因)?如何转换QString为std::string?
Pab*_*ruz 260
您可以使用:
QString qs;
// do things
std::cout << qs.toStdString() << std::endl;
Run Code Online (Sandbox Code Playgroud)
这是参考文档QString.
Art*_*yom 213
转换QString到时应该记住的一件事是UTF-16编码std::string的事实......可能有任何编码.QStringstd::string
所以最好的是:
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();
Run Code Online (Sandbox Code Playgroud)
如果指定编解码器,建议的(接受的)方法可能有效.
请参阅:http://doc.qt.io/qt-5/qstring.html#toLatin1
chr*_*ris 24
QString qstr;
std::string str = qstr.toStdString();
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用的是Qt:
QTextStream out(stdout);
out << qstr;
Run Code Online (Sandbox Code Playgroud)
Pup*_*ppy 18
最好的办法是重载operator << self,这样QString就可以作为一个类型传递给任何期望输出类型的库.
std::ostream& operator<<(std::ostream& str, const QString& string) {
return str << string.toStdString();
}
Run Code Online (Sandbox Code Playgroud)
小智 12
建议的替代方案:
QString qs;
std::string current_locale_text = qs.toLocal8Bit().constData();
Run Code Online (Sandbox Code Playgroud)
可能:
QString qs;
std::string current_locale_text = qPrintable(qs);
Run Code Online (Sandbox Code Playgroud)
请参阅qPrintable文档,这是一个从QtGlobal提供const char*的宏.