• 实现Qt日志功能并输出到文件(qDebugqWarning qCriticalqFatal)


    <1>信息基本分类:
    qDebug : 调试信息提示
    qWarning : 一般的警告提示
    qCritical: 严重错误提示
    qFatal : 致命错误提示

    <2>如何截获这些信息
    Qt提供了qInstallMsgHandler 方法用来定制消息发生后如何来处理。
    qInstallMsgHandler 是一个回调函数,主要是由qDebug、qWarnng、qCritical、qFatal这些函数进行触发,
    也就是说,qDeubg这些函数处理的消息文本会被qInstallMsgHandler 所指向的回调函数截获,这样就允许用户自己来处理这些消息文本。
    例如,你完全可以将这些消息文本输出并保存到相关的日志文件中。

    <3>将qDebug()qWarning()qCritical()qFatal() 信息输出到指定文件中

    #include <qapplication.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    void customMessageHandler(QtMsgType type, const char *msg)
    {
        QString txtMessage;
      
        switch (type) 
        {    
            case QtDebugMsg:    //调试信息提示
                txtMessage = QString("Debug: %1").arg(msg);
                break;
    
            case QtWarningMsg:    //一般的warning提示
                txtMessage = QString("Warning: %1").arg(msg);
                break;
    
            case QtCriticalMsg:    //严重错误提示
                txtMessage = QString("Critical: %1").arg(msg);
                break;
    
            case QtFatalMsg:    //致命错误提示
                txtMessage = QString("Fatal: %1").arg(msg);
                abort();
        }
    
        //保存输出相关信息到指定文件
        QFile outputFile("customMessageLog.txt");
        outputFile.open(QIODevice::WriteOnly | QIODevice::Append);
        QTextStream textStream(&outputFile);
        textStream << txtMessage << endl;
    }

    //-----Example-----

    int main( int argc, char * argv[] )    //demo示例
    {
        QApplication app( argc, argv );
    
        qInstallMsgHandler(customMessageHandler); //注册MsgHandler回调函数
    
        //以后就可以像下面这样直接打日志到文件中,而且日志也会包含时间信息
        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 app.exec();
    }

    <4>对应取消信息处理
    直接调用qInstallMsgHandler(0)就可以了

  • 相关阅读:
    归并排序
    快速排序
    UNION与UNION ALL的区别
    聚集索引和非聚集索引
    设计模式之抽象工厂模式
    list中map 的value值时间排序
    webmvc 拦截器 允许跨域 跨域问题 sessionid不一样
    redis 主从复制 和集群
    maven打包
    bcprov-jdk15on包用于创建CSR(证书请求)
  • 原文地址:https://www.cnblogs.com/sz-leez/p/4090720.html
Copyright © 2020-2023  润新知