好久没更新了,这次介绍 qDebug()的所有输出转移至文件中

哎哎8年前C++3531
#include <QtDebug>
#include <QFile>
#include <QTextStream>
#define _TIME_ qPrintable (QTime::currentTime ().toString ("hh:mm:ss:zzz"))
void Log(QtMsgType type, const char* msg)
{
    QString qstrText;
    switch (type)
    {
    case QtDebugMsg:
        qstrText = QString("%1: %2").arg(_TIME_, msg);
        break;
    case QtWarningMsg:
        qstrText = QString("%1: %2").arg(_TIME_, msg);
        break;
    case QtCriticalMsg:
        qstrText = QString("%1: %2").arg(_TIME_, msg);
        break;
    case QtFatalMsg:
        qstrText = QString("%1: %2").arg(_TIME_, msg);
        exit(0);
    }
    QFile out("log.txt");
    out.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream ts(&out);
    ts<<qstrText<<endl;
    out.close();
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    qInstallMsgHandler(Log);
    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 a.exec();
}


这种方法,可以防止信息过大,qtcreate 崩溃,但是会很浪费cpu 假如你的输出很多的话。

我的一个抓包程序 竟然占用25% 进行写入。


另外一种想法可能是 不停打开文件,关闭文件导致cpu占用过高。

然后变形如下:

#include <QtDebug>
#include <QFile>
#include <QTextStream>
#define _TIME_ qPrintable (QTime::currentTime ().toString ("hh:mm:ss:zzz"))
  QFile out("log.txt");
  
void Log(QtMsgType type, const char* msg)
{
    QString qstrText;
    switch (type)
    {
    case QtDebugMsg:
        qstrText = QString("%1: %2").arg(_TIME_, msg);
        break;
    case QtWarningMsg:
        qstrText = QString("%1: %2").arg(_TIME_, msg);
        break;
    case QtCriticalMsg:
        qstrText = QString("%1: %2").arg(_TIME_, msg);
        break;
    case QtFatalMsg:
        qstrText = QString("%1: %2").arg(_TIME_, msg);
        exit(0);
    }
  
    
    QTextStream ts(&out);
    ts<<qstrText<<endl;

}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //构造函数中添加
    out.open(QIODevice::WriteOnly | QIODevice::Append);
    qInstallMsgHandler(Log);
    qDebug("this is a debug message");
    qWarning("this is a warning message");
    qCritical("this is a critical message");
    qFatal("this is a fatal message");
      out.close();
    return a.exec();
}

析构函数中添加:
    out.close();


标签: 哎哎启示QT

相关文章

【无福利】K----宗像礼司 COS(图)

【无福利】K----宗像礼司 COS(图)

  作品K 角色宗像礼司 CN月王弑风          ...

“剩女恐慌”是个阴谋

“剩女恐慌”是个阴谋

中国当前的男女性比例是118∶100,“剩女恐慌症”成功地将更严峻“剩男恐慌”掩饰了过去。导语:致所有被生活辜负的好姑娘,给你方法、盔甲和武器,抵御世事无常。女孩条件越好越没人要?从前被剩下的未婚大龄...

《蝙蝠侠:阿甘骑士》游戏改编小说今年上市

《蝙蝠侠:阿甘骑士》游戏改编小说今年上市

  资深漫画编剧Marv Wolfman的最新项目,是为Rocksteady工作室即将推出的游戏《蝙蝠侠:阿甘骑士》撰写官方小说,这本小说预计在今年晚些时候上市。Wolfman在他的脸书主页上向粉丝们...

北京最磨人的零食小吃 堪比辣条

北京最磨人的零食小吃 堪比辣条

(来源:北京人不知道的北京事)1、【洪记小吃店】上牛街吃解馋牛肉粒儿地址:西城区牛街12号(牛街清真超市对面)时间:早餐6:30 - 8:00 正餐 10:00 - 22:00记当家招牌牛肉粒,排长队...

现实中的你和幻想中的我

现实中的你和幻想中的我

  现实与幻想有着不可逾越的鸿沟,不是太远就是太深,令人寒索,渐渐地,现实中的你产生了幻想中的我,现实中的你,在面对着现实的世界,幻想中的我,就像生活在幸福的国度,无忧无虑!  偶有一天,现实中的你,...

英男子不满被朋友嘲笑铅笔小 自己注射增大照成发炎

英男子不满被朋友嘲笑铅笔小 自己注射增大照成发炎

    英国男子Szilveszter对他的铅笔尺寸非常不满意,决定自己对它做点事情改变一下。但是又舍不得花钱,自己注射了一针管的凡士林。  还没吸口冷气么?再看后续。因为凡士林是注射进去的外来物,在...