我正在尝试做类似这样的事情:
QString string;
// do things...
std::cout << string << std::endl;
但是代码无法编译。如何将 qstring
的内容输出到控制台(例如进行调试或其他原因)?如何将 QString
转换为 std::string
?
我正在尝试做类似这样的事情:
QString string;
// do things...
std::cout << string << std::endl;
但是代码无法编译。如何将 qstring
的内容输出到控制台(例如进行调试或其他原因)?如何将 QString
转换为 std::string
?
你可以使用:
QString qs;
// do things
std::cout << qs.toStdString() << std::endl;
它内部使用QString::toUtf8()函数创建std::string,因此它也是Unicode安全的。 这里是QString
的参考文档。
在将 QString
转换为 std::string
时,需要记住的一件事情是 QString
是 UTF-16 编码,而 std::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();
如果你指定了编解码,那么建议的(已接受的)方法可能有效。
static inline std::string toUtf8(const QString& s) { QByteArray sUtf8 = s.toUtf8(); return std::string(sUtf8.constData(), sUtf8.size()); }
- Vitalistd::string utf8_text = qs.toUtf8().constData();
因此你的说法是不正确的。 - ArtyomQString s = QString::fromUtf8("árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP"); std::cout << s.toStdString() << std::endl; std::cout << s.toUtf8().constData() << std::endl;
。第一个是不正确的,第二个完美。您需要使用UTF8终端来测试此代码。 - NotinlistQString
的内容是什么(非Latin1或其他),在管道运算符中使用.toStdString()
总是会导致访问冲突。这是在Qt 4.8.3/MSVC++ 10/Win 7上的情况。 - Daniel SanerqDebug()<<string;
它会将内容打印到控制台。与仅为调试消息转换为 std::string
相比,这种方法更好。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文档,这是一个从QtGlobal返回const char *的宏。
QString::toStdString()
。QString data;
data.toStdString().c_str();
还有一种选择是使用qPrintable或qUtf8Printable
E.g.:
#include <QString>
#include <iostream>
int main()
{
QString myString = "Hello World";
// Using qPrintable
std::cout << "qPrintable: " << qPrintable(myString) << std::endl;
// Using qUtf8Printable
std::cout << "qUtf8Printable: " << qUtf8Printable(myString) << std::endl;
return 0;
}
QString data;
data.toStdString().c_str();
~basic_string() _NOEXCEPT
{ // destroy the string
_Tidy_deallocate();
}
安全(无异常)的正确方法如Artyom所述
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();
QString::toStdString()
现在使用QString::toUtf8()
来执行转换,因此字符串的Unicode属性不会丢失(http://qt-project.org/doc/qt-5.0/qtcore/qstring.html#toStdString)。 - Emile CormierQString::toStdString
的源代码,请点击此处。 - thuga