重格式化輸出QT的QDebug資訊

2021-09-21 01:10:02 字數 1657 閱讀 9355

qt-creator的qdebug()輸出除錯資訊很方便,並且可以簡單的重定向儲存為log檔案。但是qdebug()輸出的資訊沒有直接帶上當前檔名和行號,甚至當前系統日期時間等資訊。

這裡介紹乙個方法重新格式化qdebug()輸出資訊,可以新增上你需要顯示的額外資訊,同時儲存成log檔案。

qtmessagehandler gdefaulthandler = null;

// get default handler of message handler

gdefaulthandler = qinstallmessagehandler(mymessageoutput);

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

qstring context_info = qstring("file:(%1) line:(%2)").arg(qstring(context.file)).arg(context.line);

qstring current_date = qdatetime::currentdatetime().tostring("yyyy-mm-dd hh:mm:ss");

qstring message = qstring("%1 %2 %3 %4").arg(current_date).arg(strmsg).arg(context_info).arg(msg);

// lock

static qmutex mutex;

mutex.lock();

// output to the file log.txt

qfile file("d:\\log.txt");

qtextstream stream(&file);

stream << message << "\r\n";

file.flush();

file.close();

// unlock

mutex.unlock();

// display debug info in ide

if (gdefaulthandler)

}

在qt-creator的應用程式輸出欄裡顯示的效果如下:

//qdebug("hello world!!");

2019-05-05 10:37:19 debug: file:(test.cpp) line:(583) hello world!!

為了避免release版本裡檔名context.file、函式名context.function、行數context.line消失的問題,需要在pro檔案裡加入以下選項,然後重編譯以保證該選項生效。

defines += qt_messagelogcontext
另一方法,無需重設定qinstallmessagehandler,可以在每次呼叫qdebug()時,輸入檔名和行數,如下:

qdebug("file: %s line: %d hello world!!!", __file__, __line__);

//file: test.cpp line:583 hello world!!!

以上方法,根據實際需要,自行選擇。

Qt格式化輸出資料

float fvalue 6.537 1.int sprintf char stream,const char format,例如 char buf 512 sprintf buf,10.2f fvalue sprintf buf,m.nf fvalue 顯示正負號 左對齊,預設是右對齊 m 域寬,...

格式化輸出

a 浮點數 十六進製制數字和p 記數法 a 浮點數 十六進製制數字和p 記法 c 乙個字元 char c 乙個iso寬字元 d 有符號十進位制整數 int ld ld 長整型資料 long hd 輸出短整形。e 浮點數 e 記數法 e 浮點數 記數法 f 單精度浮點數 預設float 十進位制記數法...

格式化輸出

a 浮點數 十六進製制數字和p 記數法 a 浮點數 十六進製制數字和p 記法 c 乙個字元 char c 乙個iso寬字元 d 有符號十進位制整數 int ld ld 長整型資料 long hd 輸出短整形。e 浮點數 e 記數法 e 浮點數 記數法 f 單精度浮點數 預設float 十進位制記數法...