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 十進位制記數法...