繁体   English   中英

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

[英]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();

甚至可以在 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();

还有使用qPrintableqUtf8Printable的选项

例如:

#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM