2012-11-18 166 views
15

有時候我想輸出qDebug()單行線,但也有一些有條件的文字,像避免換行()

if (fontMetricsLeading < 0) 
    qDebug() << "!!!"; 
qDebug() << fontMetricsLeading; 

然而,將輸出他們在2條獨立的線路。

有沒有辦法避免在每個qDebug()之後追加新行?

+0

後來我發現一個相關的問題(但詢問的空間爲好) - https://stackoverflow.com/questions/5209823/how-to-call-qdebug-without-the-appended-spaces- and-newline – sashoalm

回答

28

我剛剛發現了一個似乎可行的解決方案。讀取文檔qDebug()返回一個臨時QDebug對象,該對象在銷燬時追加換行符。看起來這個臨時對象可以存儲在一個臨時變量中:

QDebug debug = qDebug(); 
if (fontMetricsLeading < 0) 
    debug << "!!!"; 
debug << fontMetricsLeading; 
+0

在Qt 5.7中(可能在任何5.x中)事情更復雜(我可能會添加不必要的複雜)。 'qDebug()'不再變成一個隨時可用的'QDebug'對象,因此必須通過閱讀大量文檔來解決整個問題。非常煩人。 – rbaleksandar

3

您可以使用三元運算符。

qDebug() << (fontMetricsLeading < 0 ? "!!!" : "") << fontMetricsLeading; 

另一種方法是建立在QString這樣的隊列。

QString debugString; 

if(fontMetricsLeading < 0) 
    debugString += "!!!"; 

debugString += QString::number(fontMetricsLeading); 

qDebug() << debugString; 

雖然我不明白你爲什麼會需要去到這個程度,如果只是用於調試目的。

0

處理您的情況的另一種方法。

QString msg; 

if (fontMetricsLeading < 0) 
{ 
    msg = "!!!"; 
} 

qDebug("%s, %d", qPrintable(msg), fontMetricsLeading);