相對於第三方的日誌庫,在 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...