Home Articles

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

Asked
Viewed 190 times
199

我想做这样的事情:

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

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

10 Answers

  • 231
    QString qstr;
    std::string str = qstr.toStdString();
    

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

    QTextStream out(stdout);
    out << qstr;
    
  • 194

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

    你可以使用喜欢,

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

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

  • 32

    最好的办法是重载operator << self,这样QString就可以作为一个类型传递给任何期望输出类型的库 .

    std::ostream& operator<<(std::ostream& str, const QString& string) {
        return str << string.toStdString();
    }
    
  • 23

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

  • 17

    您可以使用:

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

    Here's QString 的参考文献 .

  • 10

    建议的替代方案:

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

    可能:

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

    请参阅qPrintable documentation,一个从QtGlobal传递const char *的宏 .

  • 7

    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

  • 2
    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();
    
  • 0

    你可以用这个;

    QString data;
    data.toStdString().c_str();
    
  • 0

    试试这个:

    #include <QDebug>
    QString string;
    // do things...
    qDebug() << "right" << string << std::endl;
    

Related