• Qt QDebug等重定向到文件中


    源地址:http://blog.163.com/soyo_gogogo/blog/static/171414077201392705639321/

      Qt的qDebug() 等函数,可以打印出十分细致的log,用过你就会喜欢。现在要将qDebug() 等重定向到文件中。

            
    使用Qt的MessageHandler可以将消息重定向。在Qt4.x时代,安装一个消息处理器是用

    qInstallMsgHandler

    来安装的。这个函数接受的一个函数指针作为参数,函数的定义是

     void funName(QtMsgType , const char *)

    如笔者的一个小函数:

    void messageOutput(QtMsgType, const char *msg)
    {
        static QMutex mutex;
        mutex.lock();
        logFile->write(msg);
        logFile->write("
    ");
        logFile->flush();
        mutex.unlock();
    }
     
    // Install it
    qInstallMsgHandler(messageOutput);

    logFile是一个全局的QFile类指针。

     

    今天笔者使用Qt5.1版本来编写程序。该函数编译不通过。因为Qt 5.x后,这个函数被

    qInstallMessageHandler

    替代了。这个函数同样接受一个函数指针作为参数,函数的定义是

    void funName(QtMsgType , QMessageLogContext , const QString &)

    可见,该函数中多了一个QMessageLogContext参数。这个参数包含了debug的一些基本信息,例如该debug所在的函数,所在的文件,所在的行数等。可以让debug更加详细。

    笔者的一段小代码

    void MessageOutput(QtMsgType type , const QMessageLogContext &context , const QString &msg)
    {
        static QMutex mutex;
        mutex.lock();
     
        QString log;
        switch(type)
        {
        case QtDebugMsg:
            log = QString("Debug: ");
            break;

     

        case QtWarningMsg:
            log = QString("Error: ");
            break;

     

        case QtCriticalMsg:
            log = QString("Critical Error: ");
            break;

     

        case QtFatalMsg:
            log = QString("Fatal Error: ");
            abort();
            break;

     

        default:
            log = QString("Unknow Msg Type : ");
            break;
        };

     

        log += QTime::currentTime().toString("hh:mm:ss.zzz, File: ") + QString(context.file) ;
        log += QString(", Line: " ) + QString::number(context.line) + QString(" : %1
    ").arg(msg);
        logFile->write(log.toStdString().c_str());
        logFile->flush();

     

        mutex.unlock();
    }

    可以见到在最后面做了一些格式化的东西。这样,debug看起来就是这样的

    Qt QDebug等重定向到文件中 - soooYo - ☆χιΑο.处
     

    至于重定向到哪里,就看你的QFile打开的是哪个文件了。

     

    这样处理格式其实还不是那么优雅。像第一个函数那样,没有做任何格式化的操作,因为笔者在另外一个文件中做了格式化。

    Qt QDebug等重定向到文件中 - soooYo - ☆χιΑο.处

     这个文件被命名为log.h。这样,需要用到QDebug的地方,都可以#include"log.h"。

    相信大家都明白了。

     

    Enjoy your Qt.

  • 相关阅读:
    hdu 1290 献给杭电五十周年校庆的礼物 (DP)
    hdu 3123 GCC (数学)
    hdu 1207 汉诺塔II (DP)
    hdu 1267 下沙的沙子有几粒? (DP)
    hdu 1249 三角形 (DP)
    hdu 2132 An easy problem (递推)
    hdu 2139 Calculate the formula (递推)
    hdu 1284 钱币兑换问题 (DP)
    hdu 4151 The Special Number (DP)
    hdu 1143 Tri Tiling (DP)
  • 原文地址:https://www.cnblogs.com/lanye/p/5363600.html
Copyright © 2020-2023  润新知