qDebug() not showing const std::string&

10,183

Solution 1

qDebug() does not know anything about std::string but it works with const char*. Appropriate operator you can find here. You can achieve this with data() or with c_str() which is better as Jiří Pospíšil said.

For example:

const std::string& testName = "asdfqwer";
qDebug() << testName.data() << testName.c_str();

Aslo you can convert std::string to QString with QString::fromStdString.

Solution 2

If you need writing std::string to qDebug() often in your code, you can implement this function globally (for example in you main.cpp):

#include <QDebug>
#include <string>

QDebug& operator<<(QDebug& out, const std::string& str)
{
    out << QString::fromStdString(str);
    return out;
}

int main()
{
    std::string jau = "jau";
    qDebug() << jau;
    return 0;
}
Share:
10,183
goGud
Author by

goGud

C++ and Qt developer

Updated on June 13, 2022

Comments

  • goGud
    goGud almost 2 years

    I am trying to use some vector data's name with struct. I am trying to get see which name in qDebug()

    To be more clear:

    const std::string& testName = "asdfqwer";
    qDebug() << testName;
    

    It gives en error message in build:

    Error: no match for 'operator<<' in 'qDebug()() << testName'
    

    I don't have options to change const std::string& type. Could you please help me to solve this issue without changing type?

  • johngull
    johngull over 9 years
    same you can use convertion to the QString with the QString::fromStdString
  • goGud
    goGud over 9 years
    Amazing.. I didn't know that behaviours of qDebug()
  • Jiří Pospíšil
    Jiří Pospíšil over 9 years
    It'd be better to use c_str() instead of data() as the latter is not required to be null-terminated (until C++11).
  • Jablonski
    Jablonski over 9 years
    @johngull Yes, you are right, but I thought that OP use here C++ only types, but I added this to answer, it correct and OP can choose what he wants.
  • Jablonski
    Jablonski over 9 years
    @JiříPospíšil I added c_str() to my answer. Thank you.
  • johngull
    johngull over 9 years
    @Chernobyl I think it is natural to use Qt types if you use qDebug. Impossible to use qDebug without using QtCore, so QString is available for him. Anyway, the main point here that convertion needed.
  • smac89
    smac89 over 3 years
    This makes a copy of the QDebug object. Shouldn't you be returning a reference instead?