在QT中有一个很有意思的头文件:<QtGlobal>,这里面定义了很多全局函数和宏,API可以参考【https://doc.qt.io/qt-5/qtglobal.html】,这里只简单的笔记下调试日志相关的代码。
CONTENTS
设置日志输出格式qSetMessagePattern
API【https://doc.qt.io/qt-5/qtglobal.html#qSetMessagePattern】
通过该API,可以设置默认的日志输出格式。
代码示例
int main(int argc, char *argv[]) { //设置日志格式 qSetMessagePattern("%{type} %{time [yyyy-MM-dd hh:mm:ss]} %{file}:%{line} %{message} "); //几种日志打印 qDebug("This is a debug message."); qWarning("This is a warning message."); qCritical("This is a critical message."); qFatal("This is a fatal message."); }
打印输出为:
debug [2020-05-07 14:28:57] ..\xxx\main.cpp:14 This is a debug message. warning [2020-05-07 14:28:57] ..\xxx\main.cpp:15 This is a warning message. critical [2020-05-07 14:28:57] ..\xxx\main.cpp:16 This is a critical message. fatal [2020-05-07 14:28:57] ..\xxx\main.cpp:17 This is a fatal message.
另外,qFatal输出时默认还会显示一个对话框,如下图所示:
关于qDebug qWarning qCritical qFatal的详细介绍,也可以参考<QtGlobal>的详细解释。
另外,如果增加了头文件 #include <QtDebug> ,就可以使用重载后的输出运算符,可以打印各种QT内部类信息,非常方便。
比如 qDebug()<<&w; 打印输出为:
debug [2020-05-07 14:38:54] ..\xxx\main.cpp:27 Main_Widget(0xaa213bfa30, name="Widget")
日志重定向qInstallMessageHandler
API【https://doc.qt.io/qt-5/qtglobal.html#qInstallMessageHandler】
通过该API,可以将日志重定向输出到我们想要的地方,比如文件或者对话框内。
代码示例
static QPlainTextEdit *s_log_output_edit; void myMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { QString detail_msg = QString("%1:%2:%3:%4").arg(type).arg(context.file).arg(context.line).arg(msg); static QMutex mutex; mutex.lock(); s_log_output_edit->appendPlainText(detail_msg); mutex.unlock(); } // QtMessageHandler old_handler = qInstallMessageHandler(0); void redirect_log_output() { if(xxxx) { qInstallMessageHandler(myMessageHandler); }else { qInstallMessageHandler(old_handler); } }
发表评论