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

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

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

有帮助吗?

解决方案

转换时您应该记住的事情之一 QStringstd::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

其他提示

您可以使用:

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

这是 参考文档 QString.

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

你可以使用像,

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);

q可打印文档, ,一个从 QtGlobal 传递 const char * 的宏。

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

你可以使用这个;

QString data;
data.toStdString().c_str();
 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();

尝试这个:

#include <QDebug>
QString string;
// do things...
qDebug() << "right" << string << std::endl;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top