Избегайте новой строки в qDebug()

Иногда я хочу вывести одну строку в qDebug(), но с некоторым условным текстом, например

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

Однако это будет выводить их на 2 отдельные строки.

Есть ли способ избежать добавления новой строки после каждого qDebug()?

Ответы

Ответ 1

Я нашел решение, которое, похоже, работает. Чтение документов qDebug() возвращает временный объект QDebug, который добавляет новую строку при уничтожении. Кажется, этот временный объект может храниться во временной переменной:

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

Ответ 2

Вы можете использовать тернарный оператор.

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

Альтернативой было бы создание очереди в QString, как это.

QString debugString;

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

debugString += QString::number(fontMetricsLeading);

qDebug() << debugString;

Хотя я не понимаю, почему вам нужно идти в этом направлении, если оно предназначено только для отладки.

Ответ 3

Еще один способ справиться с вашей ситуацией.

QString msg;

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

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