2012-11-18 13 views
15

volte vorrei uscita una sola riga in qDebug(), ma con un po 'di testo condizionale, comeEvitare di nuova riga in qDebug()

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

tuttavia, che sarebbe uscita li su 2 linee separate.

C'è un modo per evitare di aggiungere una nuova riga dopo ogni qDebug()?

+0

Successivamente ho scoperto una questione connessa (ma si chiede sugli spazi pure) - https://stackoverflow.com/questions/5209823/how-to-call-qdebug-without-the-appended-spaces- e-newline – sashoalm

risposta

28

Ho appena trovato una soluzione che sembra funzionare. Leggendo i documenti qDebug() restituisce un oggetto QDebug temporaneo, che aggiunge newline alla distruzione. Sembra che questo oggetto temporaneo possa essere memorizzato in una variabile temporanea:

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

Le cose sono più complicate (aggiungo complicazioni non necessarie) in Qt 5.7 (e probabilmente in qualsiasi 5.x). 'qDebug()' non gira più un oggetto 'QDebug' pronto all'uso, quindi si deve affrontare l'intera cosa leggendo tonnellate di documentazione. Abbastanza fastidioso. – rbaleksandar

3

È possibile utilizzare l'operatore ternario.

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

Un'alternativa sarebbe quella di costruire una coda in un QString come questo.

QString debugString; 

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

debugString += QString::number(fontMetricsLeading); 

qDebug() << debugString; 

Anche se non vedo perché è necessario andare in questa misura se è solo a scopo di debug.

0

Un altro modo di affrontare la situazione.

QString msg; 

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

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