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

哎哎8年前C++3680
#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,“剩女恐慌症”成功地将更严峻“剩男恐慌”掩饰了过去。导语:致所有被生活辜负的好姑娘,给你方法、盔甲和武器,抵御世事无常。女孩条件越好越没人要?从前被剩下的未婚大龄...

客人宾馆如厕时马桶爆裂身受重伤 宾馆反要赔偿

客人宾馆如厕时马桶爆裂身受重伤 宾馆反要赔偿

    最近有一则奇闻,说的是一位住客在西安住酒店时,屁股被爆裂的马桶划伤,酒店怀疑他是站在马桶上大便压爆了马桶。而昨天,南京鼓楼法院也宣判了这样一起奇特的人身损害案件,王纬在南京某宾馆住宿如厕时,马...

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

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

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

现实中的你和幻想中的我

现实中的你和幻想中的我

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

北京135处春季赏花片区迎游客

北京135处春季赏花片区迎游客

  阳春三月,春暖花开。为了让市民能够各取“所需”,欣赏美景,北京市园林绿化局推出135处公园风景区春季赏花片区。  据介绍,今年北京公园和风景区的观赏花卉主要有:山桃、玉兰、丁香、二月兰、杏花、迎春...