避免在qDebug()中出现换行符

19

有时我想在qDebug()中输出一行文本,但带有一些条件文本,例如:

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

然而,这样会将它们输出到2行。

是否有一种方法可以避免在每个qDebug()后追加新行?


后来我发现了一个相关的问题(但它也涉及了空格)- https://dev59.com/9W435IYBdhLWcg3wyzQJ - sashoalm
3个回答

35

我刚刚找到了一个看起来可行的解决方案。阅读文档得知,qDebug() 返回一个临时的 QDebug 对象,在销毁时会追加换行符。这个临时对象似乎可以存储在临时变量中:

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

2
在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 );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接