[英]How to convert QString to std::string?
我正在尝试做这样的事情:
QString string;
// do things...
std::cout << string << std::endl;
但代码无法编译。 如何将 output 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();
如果您指定编解码器,建议的(接受的)方法可能会起作用。
请参阅: http ://doc.qt.io/qt-5/qstring.html#toLatin1
如果您的最终目标是将调试消息发送到控制台,则可以使用qDebug() 。
你可以使用像,
qDebug()<<string;
这会将内容打印到控制台。
这种方式比仅仅为了调试消息而将其转换为std::string
更好。
QString qstr;
std::string str = qstr.toStdString();
但是,如果您使用的是 Qt:
QTextStream out(stdout);
out << qstr;
最好的办法是自己重载 operator<<,这样 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();
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();
还有使用qPrintable或qUtf8Printable的选项
例如:
#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 str="this is QString value";
qDebug()<<str.toStdString();
这应该工作。
试试这个:
#include <QDebug>
QString string;
// do things...
qDebug() << "right" << string << std::endl;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.