my-QT专栏

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
上一篇 下一篇

猜你喜欢

热点阅读