我们需要屏蔽qDebug的打印可以在pro文件中定义
DEFINES =QT_NO_DEBUG_OUTPUT
,即可屏蔽其输出。本文将介绍QT_NO_DEBUG_OUTPUT宏的实现和使用到的一个小技巧。
源码
Qt 5.12.1源码中QT_NO_DEBUG_OUTPUT
宏实现:
#define QT_NO_QDEBUG_MACRO while (false) QMessageLogger().noDebug
#if defined(QT_NO_DEBUG_OUTPUT)
# undef qDebug
# define qDebug QT_NO_QDEBUG_MACRO
#endif
上面看起来代码有点多,我们再看看Qt4版本下QT_NO_DEBUG_OUTPUT
宏的实现:
#ifdef QT_NO_DEBUG_OUTPUT
# define qDebug while(false) qDebug
#endif
效果
当我们定义了QT_NO_DEBUG_OUTPUT
宏,qDebug就会被替换为:
while(false) qDebug
例子
假设有以下代码:
代码语言:javascript复制qDebug() << "Hello world!";
那么定义了QT_NO_DEBUG_OUTPUT
宏后语句将会被替换为:
while(false) qDebug() << "Hello world!";
上述操作将永远执行不了qDebug函数,等于禁用了qDebug打印。这一技巧非常巧妙,值得学习。