【问题标题】:What is the difference between qDebug() used as a stream and as a functionqDebug() 用作流和用作函数有什么区别
【发布时间】:2014-05-14 11:31:54
【问题描述】:

我见过一些使用 qDebug 的 Qt 代码,就好像它是 printf()

qDebug( format, ... );

大多数情况下我看到它像std::cout一样使用

qDebug() << "one " << var_one;

用法有什么区别?什么时候使用另一种是正确/更好的? Qt 在线帮助似乎以某种方式引用了函数版本,但从未解释过。

【问题讨论】:

    标签: c++ qt qdebug


    【解决方案1】:

    qDebug(pattern, object1, object2) 它基本上是老式的fprintf(stderr, pattern, object1, object2),因此你依赖编译器支持来避免——例如——用错误的模式让你的程序崩溃,比如int x; qDebug("%s\n", x);。好吧,GCC 捕捉到了这个,但我认为编译器不能总是知道该模式是否合适。

    我总是使用qDebug() &lt;&lt; object &lt;&lt; ...;,如文档所述

    如果包含 QtDebug,也可以使用更方便的语法:

    qDebug() << "Brush:" << myQBrush << "Other value:" << i;
    

    使用此语法,该函数返回一个配置为使用 QtDebugMsg 消息类型的 QDebug 对象。它会自动在每个项目之间放置一个空格,并在末尾输出一个换行符。它支持许多 C++ 和 Qt 类型。

    您可以将大部分 Qt 对象传递给 qDebug()

    试试qDebug() &lt;&lt; QTime::currentTime();

    【讨论】:

    • 我正在使用 qDebug 在下一个方式(如果我需要复杂的格式):qDebug() &lt;&lt; QString( "%1 - %2" ).arg( "something1").arg( 42 );
    • 它比需要的更复杂:更好qDebug() &lt;&lt; "something" &lt;&lt; " - " &lt;&lt; 42;`
    • 这并不复杂。如果你需要输出很多字符串,结合参数——你会写很多代码。比较一下,哪个更易读:qDebug() &lt;&lt; QString("Coordinates: \"%1 x %2 x %3\"").arg(x[i]).arg(y[i]).arg(z[i]);qDebug() &lt;&lt; "Coordinates: \"" &lt;&lt; x[i] &lt;&lt; " x " &lt;&lt; y[i] &lt;&lt; " x " &lt;&lt; z[i]; &lt;&lt; "\""
    • 恕我直言,整个 printf() 更容易格式化。想象一下 width()fill() 标记的混合,如果它被格式化为表格或表单,则会出现在前面的示例中。
    • 我发现这个关于qDebug()的信息是一个函数。
    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2013-03-30
    相关资源
    最近更新 更多