qDebug()常用的一種方式如下:
qDebug() << 1 << 2 << 3;
qDebug() << 4 << 5 << 6;
輸出結果為:
1 2 3
4 5 6
請注意,1、2和3之間都有空格,1、2、3和4、5、6之間換行了。
為何會加入空格?
查看QDebug源碼,發現每個operator<<后都有maybeSpace()函數調用,而它會按照space標志加入空格,如下:
1 inline QDebug &operator<<(signed int t) { stream->ts << t; return maybeSpace(); } 2 3 inline QDebug &maybeSpace() { if (stream->space) stream->ts << ' '; return *this; }
因此,空格可以使用nospace去掉。
為何會換行?
分析一下發現,每次執行完一行輸出就換行,猜測是析構時做了手腳,因為operator<<返回的是QDebug&。查看源碼發現:
1 if (stream->message_output) { 2 qt_message_output(stream->type, 3 stream->context, 4 stream->buffer); 5 }
在qlogging.cpp中查看qt_message_output函數,發現調用
qt_message_print(msgType, context, message);
再查看它的代碼,發現:
fprintf(stderr, "%s\n", message.toLocal8Bit().constData());
這就解釋了為什么會換行。另外,注意該函數中,上面還有一個處理messageHandler的分支,可以通過它來改變這個輸出規則。