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?
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"
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.