【问题标题】:Avoid newline in qDebug()在 qDebug() 中避免换行
【发布时间】:2012-11-06 10:54:54
【问题描述】:

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

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

但是,这会将它们输出到 2 个单独的行上。

有没有办法避免在每个 qDebug() 之后添加新行?

【问题讨论】:

标签: c++ qt newline qdebug


【解决方案1】:

您可以使用三元运算符。

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

另一种方法是像这样在QString 中建立一个队列。

QString debugString;

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

debugString += QString::number(fontMetricsLeading);

qDebug() << debugString;

虽然我不明白如果只是为了调试目的,你为什么需要达到这种程度。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 在 Qt 5.7 中(可能在任何 5.x 中)事情更复杂(我可能会添加不必要的复杂)。 qDebug() 不再变成现成的 QDebug 对象,因此必须通过阅读大量文档来解决整个问题。很烦人。
    【解决方案3】:

    另一种处理你的情况的方法。

    QString msg;
    
    if ( fontMetricsLeading < 0 )
    {
        msg = "!!!";
    }
    
    qDebug( "%s, %d", qPrintable( msg ), fontMetricsLeading );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 2013-01-04
      • 2011-04-04
      相关资源
      最近更新 更多