Qt 日志之 qInstallMessageHandler(重
2021-09-09 本文已影响0人
c之气三段
#include "MainWindow/MainWindow.h"
#include <QApplication>
#include <QMutex>
#include <QDebug>
#include <QDateTime>
#include <iostream>
void messageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg);
MainWindow *m_mainWindow;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
m_mainWindow = &w;
qInstallMessageHandler(messageOutput);
qDebug()<<"11111";
qInfo()<<"22222";
qWarning()<<"33333";
qCritical()<<"4444444";
//qFatal("555555");//会出错,不知道原因
return a.exec();
}
void messageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
// 加锁保证同步
static QMutex mutex;
mutex.lock();
Q_UNUSED(context)//获取qt代码中的各种信息如何位置,行数,函数等
QString strMsg;
QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
switch(type)
{
case QtDebugMsg:
std::cout<<QString(msg.constData()).toLocal8Bit().toStdString()<<std::endl;
break;
case QtInfoMsg:
strMsg.append("<font color=\"#0000FF\">").append(strDateTime).append("=== Info : ");
break;
case QtWarningMsg:
strMsg.append("<font color=\"#FF0000\">").append(strDateTime).append("=== Warning : ");
break;
case QtCriticalMsg:
strMsg.append("<font color=\"#FF0000\">").append(strDateTime).append("=== Error : ");
break;
case QtFatalMsg:
strMsg.append("<font color=\"#FF0000\">").append(strDateTime).append("=== Fatal : ");
break;
}
if(strMsg.isEmpty())
{
mutex.unlock();
return;
}
// 设置输出信息格式
strMsg.append(QString(msg.constData())).append(" ===");
strMsg.append("</font>");
m_mainWindow->writeLog(strMsg);
// 解锁
mutex.unlock();
}
image.png