zoukankan      html  css  js  c++  java
  • 实现Qt日志功能并输出到文件(使用qInstallMsgHandler安装customMessageHandler)good

    原文 http://www.cppblog.com/lauer3912/archive/2011/04/10/143870.html

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

    二、如何截获这些信息

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

    三、将qDebug()qWarning()qCritical()qFatal() 信息输出到指定文件中

     1 #include <QtDebug>
     2 #include <QFile>
     3 #include <QTextStream>
     4 
     5 void customMessageHandler(QtMsgType type, const char *msg)
     6 {
     7         QString txt;
     8         switch (type) {
     9         //调试信息提示
    10         case QtDebugMsg:
    11                 txt = QString("Debug: %1").arg(msg);
    12                 break;
    13 
    14         //一般的warning提示
    15         case QtWarningMsg:
    16                 txt = QString("Warning: %1").arg(msg);
    17         break;
    18         //严重错误提示
    19         case QtCriticalMsg:
    20                 txt = QString("Critical: %1").arg(msg);
    21         break;
    22         //致命错误提示
    23         case QtFatalMsg:
    24                 txt = QString("Fatal: %1").arg(msg);
    25                 abort();
    26         }
    27 
    28         QFile outFile("debuglog.txt");
    29         outFile.open(QIODevice::WriteOnly | QIODevice::Append);
    30         QTextStream ts(&outFile);
    31         ts << txt << endl;
    32 }
    33 
    34 int main( int argc, char * argv[] )
    35 {
    36         QApplication app( argc, argv );
    37 
    38         //先注册自己的MsgHandler
    39         qInstallMsgHandler(customMessageHandler);        
    40         
    41         //以后就可以像下面这样直接打日志到文件中,而且日志也会包含时间信息
    42         qDebug("This is a debug message at thisisqt.com");
    43         qWarning("This is a warning message  at thisisqt.com");
    44         qCritical("This is a critical message  at thisisqt.com");
    45         qFatal("This is a fatal message at thisisqt.com");
    46 
    47         return app.exec();
    48 }



    四、如何取消信息处理呢?
    简单:
    还是用qInstallMsgHandler.
    只要执行qInstallMsgHandler(0) 就可以了

    http://blog.csdn.net/liuguangzhou123/article/details/7606489

  • 相关阅读:
    [bzoj4893]项链分赃
    [Spoj]Counting Divisors (cube)
    [Noi2016]国王饮水记
    [Noi2016]网格
    [Noi2016]优秀的拆分
    [Noi2016]区间
    [Noi2015]寿司晚宴
    Codeforces Round #411 (Div. 2)
    VK-Cup2017 Wild Card Round 2
    [Noi2015]小园丁和老司机
  • 原文地址:https://www.cnblogs.com/findumars/p/6361974.html
Copyright © 2011-2022 走看看