Qt重定向QDebug,自定義乙個簡易的日誌管理類

2021-10-10 00:08:14 字數 2077 閱讀 6272

相對於第三方的日誌庫,在 qt 中使用 qdebug 列印更便捷,有時候也需要對 qdebug 輸出進行重定向,如寫入檔案等。

在 qt4 中使用 qinstallmsghandler 函式設定重定向的函式指標:

typedef void (*qtmsghandler)(qtmsgtype, const char *);

q_core_export qt_deprecated qtmsghandler qinstallmsghandler(qtmsghandler);

在 qt5 中應該使用 qinstallmessagehandler 來註冊函式指標:

typedef void (*qtmessagehandler)(qtmsgtype, const qmessagelogcontext &, const qstring &);

q_core_export qtmessagehandler qinstallmessagehandler(qtmessagehandler);

返回的函式指標我們可以儲存起來,需要輸出到控制台時進行呼叫。 

乙個最簡單的示例如下,重定向到檔案: 

void mymessagehandle(qtmsgtype , const qmessagelogcontext& , const qstring& msg)

#ifndef logmanager_h

#define logmanager_h

#include #include #include #include #include /**

* @brief 簡易的日誌管理類,作為單例

* @details

* 初始化時呼叫initmanager重定向

* @note

* 改為手動呼叫initmanager是為了便於流程控制

* 此外,也可以手動呼叫freemanager

*/class logmanager : public qobject

;#endif // logmanager_h

#include "logmanager.h"

void outputlogmessage(qtmsgtype type, const qmessagelogcontext& context, const qstring& msg)

logmanager::logmanager()

logmanager::~logmanager()

logmanager *logmanager::getinstance()

void logmanager::outputlog(qtmsgtype type, const qmessagelogcontext &context, const qstring &msg)

//加個執行緒id用於測試

stream<1000*60)

}if(!file.isopen())

}if(file.isopen())

//傳送訊號給需要的物件,如ui上顯示日誌

emit newlog(type, msg);

//預設的輸出,控制台

//區分日誌型別給文字加顏色

//常見格式為:\e[顯示方式;前景色;背景色m輸出字串\e[0m

//其中\e=\033

qstring cmd_text;

stream.setstring(&cmd_text);

switch (type)

stream

}void logmanager::initmanager(const qstring &path)

qdir dir(filepath);

if(!dir.exists())

elapsedtimer.start();

//重定向qdebug到自定義函式

defaultoutput=qinstallmessagehandler(outputlogmessage);

}void logmanager::freemanager()

Qt自定義qDebug輸出

qdebug預設輸出字串 換行 想要輸出檔名,函式名,行號需要自定義,如下是輸出到檔案,並且列印到控制台 自定義訊息處理函式 void mymessageoutput qtmsgtype type,const qmessagelogcontext context,const qstring msg ...

Qt 自定義事件

最近做的專案,是用qt的完成的,在用到事件派發的時候,要用自己自定義的事件型別來滿足需要。具體就是按照qt的官方文件說明,做了乙個簡單的例子,以免忘記,就先寫下來儲存。首先有個customevent 類,繼承自qevent ifndef customevent h define customeven...

Qt 自定義事件

關於qt的自定義事件也是看了幾個大牛的部落格。總結下心得,如有錯誤請指出。一起成長。先給原始碼。也是第一次原創啊,不知道怎麼寫,呵呵。include include class mywidget public qwidget static const int mycustomeventtype 10...