qDebug輸出換行的原因


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的分支,可以通過它來改變這個輸出規則。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM