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)中的函數将會被底層回調運作。