2012-11-18 13 views
15

Czasami chcę wyjście jeden linii w qDebug(), ale z jakiegoś tekstu warunkowego, jakUnikać nowalinia w qDebug()

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

jednak, że ich wyjście na 2 oddzielnych liniach.

Czy istnieje sposób uniknięcia dołączania nowej linii po każdym qDebug()?

+0

I później znalazłem powiązane pytanie (ale prosi o przestrzeniach, jak również) - https://stackoverflow.com/questions/5209823/how-to-call-qdebug-without-the-appended-spaces- and-newline – sashoalm

Odpowiedz

28

Właśnie znalazłem rozwiązanie, które wydaje się działać. Czytanie dokumentów qDebug() zwraca tymczasowy obiekt QDebug, który dodaje znak nowej linii do zniszczenia. Wygląda na to, że ten tymczasowy obiekt może być przechowywany w zmiennej tymczasowej:

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

Rzeczy są bardziej skomplikowane (niepotrzebnie skomplikowane, co mogę dodać) w Qt 5.7 (i prawdopodobnie w każdym 5.x). 'qDebug()' nie zmienia już gotowego obiektu 'QDebug', dlatego trzeba zająć się całą sprawą, czytając mnóstwo dokumentacji. Dość irytujące. – rbaleksandar

3

Możesz użyć operatora trójskładnikowego.

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

Alternatywą byłoby zbudowanie kolejkę w QString tak.

QString debugString; 

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

debugString += QString::number(fontMetricsLeading); 

qDebug() << debugString; 

Chociaż nie widzę powodu, dla którego trzeba by przejść do tego stopnia, jeśli jest to tylko do celów debugowania.

0

Inny sposób radzenia sobie z sytuacją.

QString msg; 

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

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