qDebug()日志重定向处理
Qt有Debug、Warning、Info、Critical、Fatal五种级别的调试信息。
信号类型 | 信息等级 | 对应函数 |
---|---|---|
qDebug | 调试信息 | qDebug() |
qInfo | 一般信息 | qInfo() |
qWarning | 警告信息 | qWarning() |
qCritical | 严重错误 | qCritical() |
qFatal | 致命错误 | qFatal() |
实现方法
使用函数原型(qt库所有)
typedef void (*QtMsgHandler)(QtMsgType, const char *);
Q_CORE_EXPORT QtMsgHandler qInstallMsgHandler(QtMsgHandler);
(1)首先依据上面void (*QtMsgHandler)(QtMsgType, const char *);函数格式,定义一个自己的函数,函数内部就是自己处理日志的方法(如输出到终端、或是保存到文件)。定义如下:
void MessageHandler(QtMsgType type, const char *msg)
{
//函数内部就是自己处理日志的方法(如输出到终端、或是保存到文件)
LogMannage::instance()->msgOut(type,msg); //我的处理方法(可无视)
}
注意:函数参数和返回内容需要一致,函数名任意。
(2)在所以输出日志前调用此函数:
参数为(1)中定义的函数指针,MessageHandler函数为回调函数,qt预留此注册函数便是为了函数回调操作。
(3)最后软件日志输出,如下操作:
调用上面代码后,qt底层会访问(2)中传入的函数指针,所以(1)中的函数将会被底层回调运行。