qtqstringqdebug

Why is QString printed with quotation marks?


So when you use qDebug() to print a QString, quotation marks appears suddenly in the output.

int main()
{
    QString str = "hello world"; //Classic
    qDebug() << str; //Output: "hello world"
    //Expected Ouput: hello world
}

I know we can solve this with qPrintable(const QString), but I was just wondering why does QString work like that?, and Is there a method inside QString to change the way it's printed?


Solution

  • Why?

    It's because of the implementation of qDebug().

    From the source code:

    inline QDebug &operator<<(QChar t) { stream->ts << '\'' << t << '\''; return maybeSpace(); }
    inline QDebug &operator<<(const char* t) { stream->ts << QString::fromAscii(t); return maybeSpace(); }
    inline QDebug &operator<<(const QString & t) { stream->ts << '\"' << t  << '\"'; return maybeSpace(); }
    

    Therefore,

    QChar a = 'H';
    char b = 'H';
    QString c = "Hello";
    
    qDebug()<<a;
    qDebug()<<b;
    qDebug()<<c;
    

    outputs

    'H' 
     H 
    "Hello"
    

    Comment

    So why Qt do this? Since qDebug is for the purpose of debugging, the inputs of various kinds of type will become text stream output through qDebug.

    For example, qDebug print boolean value into text expression true / false:

    inline QDebug &operator<<(bool t) { stream->ts << (t ? "true" : "false"); return maybeSpace(); }
    

    It outputs true or false to your terminal. Therefore, if you had a QString which store true, you need a quote mark " to specify the type.