267

我正在尝试做这样的事情:

QString string;
// do things...
std::cout << string << std::endl;

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

4

10 回答 10

316

您可以使用:

QString qs;
// do things
std::cout << qs.toStdString() << std::endl;

它在内部使用 QString::toUtf8() 函数来创建 std::string,因此它也是 Unicode 安全的。QString.

于 2010-11-18T11:48:01.820 回答
244

QString转换为时应记住的一件事std::stringQStringUTF-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

于 2011-01-10T08:36:31.633 回答
36

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

你可以使用喜欢,

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

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

于 2010-11-18T12:12:32.527 回答
25
QString qstr;
std::string str = qstr.toStdString();

但是,如果您使用的是 Qt:

QTextStream out(stdout);
out << qstr;
于 2010-11-18T11:52:43.720 回答
18

最好的办法是自己重载 operator<<,以便 QString 可以作为类型传递给任何期望输出类型的库。

std::ostream& operator<<(std::ostream& str, const QString& string) {
    return str << string.toStdString();
}
于 2010-11-18T12:02:57.467 回答
12

建议的替代方案:

QString qs;
std::string current_locale_text = qs.toLocal8Bit().constData();

可能:

QString qs;
std::string current_locale_text = qPrintable(qs);

请参阅qPrintable 文档,这是一个从 QtGlobal 提供 const char * 的宏。

于 2012-09-06T12:09:03.063 回答
8

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

于 2013-08-02T13:21:08.270 回答
2

你可以用这个;

QString data;
data.toStdString().c_str();
于 2017-01-27T12:06:02.710 回答
0
 QString data;
   data.toStdString().c_str();

甚至可以在 xstring 中的 VS2017 编译器上引发异常

 ~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();
于 2018-08-03T16:54:05.063 回答
-2

尝试这个:

#include <QDebug>
QString string;
// do things...
qDebug() << "right" << string << std::endl;
于 2018-12-12T02:09:08.927 回答