【发布时间】:2014-05-14 11:31:54
【问题描述】:
我见过一些使用 qDebug 的 Qt 代码,就好像它是 printf()
qDebug( format, ... );
大多数情况下我看到它像std::cout一样使用
qDebug() << "one " << var_one;
用法有什么区别?什么时候使用另一种是正确/更好的? Qt 在线帮助似乎以某种方式引用了函数版本,但从未解释过。
【问题讨论】:
我见过一些使用 qDebug 的 Qt 代码,就好像它是 printf()
qDebug( format, ... );
大多数情况下我看到它像std::cout一样使用
qDebug() << "one " << var_one;
用法有什么区别?什么时候使用另一种是正确/更好的? Qt 在线帮助似乎以某种方式引用了函数版本,但从未解释过。
【问题讨论】:
qDebug(pattern, object1, object2) 它基本上是老式的fprintf(stderr, pattern, object1, object2),因此你依赖编译器支持来避免——例如——用错误的模式让你的程序崩溃,比如int x; qDebug("%s\n", x);。好吧,GCC 捕捉到了这个,但我认为编译器不能总是知道该模式是否合适。
我总是使用qDebug() << object << ...;,如文档所述
如果包含 QtDebug,也可以使用更方便的语法:
qDebug() << "Brush:" << myQBrush << "Other value:" << i;
使用此语法,该函数返回一个配置为使用 QtDebugMsg 消息类型的 QDebug 对象。它会自动在每个项目之间放置一个空格,并在末尾输出一个换行符。它支持许多 C++ 和 Qt 类型。
您可以将大部分 Qt 对象传递给 qDebug()
试试qDebug() << QTime::currentTime();
【讨论】:
qDebug() << QString( "%1 - %2" ).arg( "something1").arg( 42 );
qDebug() << "something" << " - " << 42;`
qDebug() << QString("Coordinates: \"%1 x %2 x %3\"").arg(x[i]).arg(y[i]).arg(z[i]); 或 qDebug() << "Coordinates: \"" << x[i] << " x " << y[i] << " x " << z[i]; << "\""
width() 和 fill() 标记的混合,如果它被格式化为表格或表单,则会出现在前面的示例中。