好久没更新了,这次介绍 qDebug()的所有输出转移至文件中
#include <QtDebug> #include <QFile> #include <QTextStream> #define _TIME_ qPrintable (QTime::currentTime ().toString ("hh:mm:ss:zzz")) void Log(QtMsgType type, const char* msg) { QString qstrText; switch (type) { case QtDebugMsg: qstrText = QString("%1: %2").arg(_TIME_, msg); break; case QtWarningMsg: qstrText = QString("%1: %2").arg(_TIME_, msg); break; case QtCriticalMsg: qstrText = QString("%1: %2").arg(_TIME_, msg); break; case QtFatalMsg: qstrText = QString("%1: %2").arg(_TIME_, msg); exit(0); } QFile out("log.txt"); out.open(QIODevice::WriteOnly | QIODevice::Append); QTextStream ts(&out); ts<<qstrText<<endl; out.close(); } int main(int argc, char *argv[]) { QApplication a(argc, argv); qInstallMsgHandler(Log); qDebug("this is a debug message"); qWarning("this is a warning message"); qCritical("this is a critical message"); qFatal("this is a fatal message"); return a.exec(); }
这种方法,可以防止信息过大,qtcreate 崩溃,但是会很浪费cpu 假如你的输出很多的话。
我的一个抓包程序 竟然占用25% 进行写入。
另外一种想法可能是 不停打开文件,关闭文件导致cpu占用过高。
然后变形如下:
#include <QtDebug> #include <QFile> #include <QTextStream> #define _TIME_ qPrintable (QTime::currentTime ().toString ("hh:mm:ss:zzz")) QFile out("log.txt"); void Log(QtMsgType type, const char* msg) { QString qstrText; switch (type) { case QtDebugMsg: qstrText = QString("%1: %2").arg(_TIME_, msg); break; case QtWarningMsg: qstrText = QString("%1: %2").arg(_TIME_, msg); break; case QtCriticalMsg: qstrText = QString("%1: %2").arg(_TIME_, msg); break; case QtFatalMsg: qstrText = QString("%1: %2").arg(_TIME_, msg); exit(0); } QTextStream ts(&out); ts<<qstrText<<endl; } int main(int argc, char *argv[]) { QApplication a(argc, argv); //构造函数中添加 out.open(QIODevice::WriteOnly | QIODevice::Append); qInstallMsgHandler(Log); qDebug("this is a debug message"); qWarning("this is a warning message"); qCritical("this is a critical message"); qFatal("this is a fatal message"); out.close(); return a.exec(); } 析构函数中添加: out.close();