使用 qDebug
于 2010 年 7 月 15 日
如今,GUI 调试器是常态,但是,我仍然感到时不时需要做一些 printf 式调试。这也许是错误的,也许是愚蠢的,但它有效。
我喜欢开发一些图形应用程序,并且我喜欢使用 Qt。对于 Qt,友好的挪威巨魔们提供了 qDebug 函数。您可以像使用您旧的值得信赖的 printf 一样立即使用它
if(complexStatement(x)) { qDebug("This code executes when x = %d", x); ...
这对于整数和其他基本类型非常有效。但是,以相当常见的类 QColor 为例。您的第一个想法可能是手动写出每个组件
qDebug("Color is: %x, %x, %x", color.red(), color.green(), color.blue());
这可能相当繁琐,并且有些类型很难打印。例如,QString 存储 Unicode 字符串并使用隐式共享来减少复制开销。这为您提供了快速的国际化应用程序,但是您无法轻松地打印它。qPrintable 来拯救:
qDebug("A string: %s", qPrintable(myString));
qPrintable 宏非常方便,但是您还需要注意它的怪癖。返回的 const char 指针仅对该次调用有效。也就是说,您不能存储它并重新使用它 - 这很可能会给您垃圾输出。
// Do not do this const char *text = qPrintable(myString); // ... doSomething(text);
对于那些将 printf 调试称为 cout 调试的人,以及那些希望拥有更方便的 API 的人,我建议包含 QtDebug 头文件。这样,您可以将 Qt 的大多数类型流式传输到 qDebug。这意味着在需要打印 QColor 值等时,API 会更加方便
qDebug() << color;
使用 qDebug 进行打印通常会导致控制台输出(您可能需要在项目文件中添加 CONFIG += console 才能在某些平台上获得输出)。但是,您也可以安装消息处理程序以在 GUI 窗口中显示您的消息、翻译它们、用颜色绘制它们或只是将它们放在日志文件中。