sashoalm
sashoalm

Reputation: 79467

Avoid newline in qDebug()

Sometimes I want to output a single line in qDebug(), but with some conditional text, like

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

However, that would output them on 2 separate lines.

Is there a way to avoid appending a new line after each qDebug()?

Upvotes: 19

Views: 10856

Answers (3)

warunanc
warunanc

Reputation: 2261

Another way of dealing with your situation.

QString msg;

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

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

Upvotes: 0

sashoalm
sashoalm

Reputation: 79467

I just found a solution that seems to work. Reading the docs qDebug() returns a temporary QDebug object, which appends newline on destruction. It seems this temporary object can be stored in a temporary variable:

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

Upvotes: 35

Austin Brunkhorst
Austin Brunkhorst

Reputation: 21130

You can use the ternary operator.

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

An alternative would be to build a queue in a QString like this.

QString debugString;

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

debugString += QString::number(fontMetricsLeading);

qDebug() << debugString;

Although I don't see why you would need to go to this extent if it's just for debug purposes.

Upvotes: 3

Related Questions