如何将QString转换为std :: string?

aug*_*tin 222 c++ qstring qt type-conversion

我想做这样的事情:

QString string;
// do things...
std::cout << string << std::endl;
Run Code Online (Sandbox Code Playgroud)

但代码不编译.如何将qstring的内容输出到控制台(例如出于调试目的或其他原因)?如何转换QStringstd::string

Pab*_*ruz 260

您可以使用:

QString qs;
// do things
std::cout << qs.toStdString() << std::endl;
Run Code Online (Sandbox Code Playgroud)

这是参考文档QString.

  • 从Qt 5.0开始,`QString :: toStdString()`现在使用`QString :: toUtf8()`来执行转换,因此字符串的Unicode属性不会丢失(http://qt-project.org/ DOC/QT-5.0/qtcore/qstring.html#toStdString). (72认同)
  • -1这是非常糟糕的方法,因为它丢失了字符串的unicode属性 (29认同)
  • ^除非你不需要担心特殊字符. (12认同)

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

  • @Vitali不正确."为QByteArray中的析构函数被调用之前的STL字符串的构造函数"是不正确的语句:引用标准:12.2.3临时对象被销毁作为评价充分表达(1.9)的最后一步是(词汇)包含创建它们的点.而完整的表达式是`std :: string utf8_text = qs.toUtf8().constData();`所以你的陈述不正确 (17认同)
  • @Vitali号.失去非拉丁字符.试试这个:`QString 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终端来测试它. (6认同)
  • 对于它的价值,`.toStdString()`对我来说总是导致管道操作符中的访问冲突,而不管`QString`的内容(非latin1或不是latin1).这是在Qt 4.8.3/MSVC++ 10/Win 7上. (3认同)

lia*_*iaK 35

如果您的最终目标是将调试消息发送到控制台,则可以使用qDebug().

你可以使用喜欢,

qDebug()<<string;这会将内容打印到控制台.

这种方式比std::string仅仅为了调试消息而转换它更好.


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)

  • 我不这么认为.你试过std :: cout << qstr,而不是QTextString(stdout)<< qstr; (2认同)

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)

  • 人们为什么选票呢?在我的情况下这是一种矫枉过正,但谁知道,它可能是有用的(对我或其他人). (3认同)

小智 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*的宏.

  • 即使在带有`-no-stl`-Option设置的Qt-Build中也可以使用。[更多信息](http://asmaloney.com/2011/11/code/qstringtostdstring-qstringfromstdstring-and-no-stl/) (2认同)

sha*_*enk 8

最简单的方法是QString::toStdString().