Это из-за реализации qDebug()
.
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(); }
Поэтому
QChar a = 'H';
char b = 'H';
QString c = "Hello";
qDebug()<
выводит
'H'
H
"Hello"
Итак, почему Qt делает это? Поскольку qDebug
предназначен для отладки, входы различного типа станут текстовыми потоками через qDebug
.
Например, qDebug
печатает логическое значение в текстовое выражение true
/ false
:
inline QDebug &operator<<(bool t) { stream->ts << (t ? "true" : "false"); return maybeSpace(); }
Он выводит true
или false
на ваш терминал. Поэтому, если у вас есть QString
, который хранит true
, вам нужно указать метку кавычки "
, чтобы указать тип.