C/C++知识点之Qt高级——Qt日志信息处理
小标 2019-05-08 来源 : 阅读 1481 评论 0

摘要:本文主要向大家介绍了C/C++知识点之Qt高级——Qt日志信息处理,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之Qt高级——Qt日志信息处理,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

C/C++知识点之Qt高级——Qt日志信息处理

一、Qt日志功能简介


Qt有Debug、Warning、Critical、Fatal四种级别的调试信息。
qDebug:调试信息
qWarning:警告信息
qCritical:严重错误
qFatal:致命错误
Qt4提供了qInstallMsgHandler(Qt5:qInstallMessageHandler)对qDebug、qWarning、qCritical、qFatal等函数输出信息的重定向处理。
qInstallMsgHandler是一个回调函数,由qDebug、qWarnng、qCritical、qFatal函数进行触发,qDebug、qWarnng、qCritical、qFatal函数处理的消息文本会被qInstallMsgHandler所指向的回调函数截获,允许用户自己来处理输出的消息文本。

二、Qt日志输出组件

1、Qt日志输出组件定义

定制一个日志信息输出组件。
LogWidget.h文件:

#ifndef LOGWIDGET_H#define LOGWIDGET_H#include <QWidget>#include <QTextEdit>#include <QHBoxLayout>#include <QApplication>#include <QMutex>#include <QDateTime>/**
 * @brief 日志组件
 */class LogWidget : public QWidget
{
    Q_OBJECTpublic:    /**
     * @brief 获取单例
     * @return
     */    static LogWidget* getInstance();    /**
     * @brief 日志信息输出函数
     * @param type 参数,日志信息的级别
     * @param msg 参数,日志信息的内容
     */    void outputMessage(QtMsgType type, const char *msg);protected:    explicit LogWidget(QWidget *parent = NULL);    /**
     * @brief 打印日志信息
     * @param msg 输入参数,日志信息
     */    void printMessage(const QString& msg);private:    static LogWidget* m_instance;//单例
    QTextEdit* m_textEdit;//日志输出多行文本框};#endif // LOGWIDGET_H

LogWidget.cpp文件:

#include ""LogWidget.h""LogWidget* LogWidget::m_instance = NULL;

LogWidget *LogWidget::getInstance()
{    if(m_instance == NULL)
    {
        m_instance = new LogWidget();
    }    return m_instance;
}void LogWidget::printMessage(const QString &msg)
{
    m_textEdit->append(msg);
}

LogWidget::LogWidget(QWidget *parent) : QWidget(parent)
{
    m_textEdit = new QTextEdit(this);
    m_textEdit->setReadOnly(true);
    QHBoxLayout* layout = new QHBoxLayout;
    layout->addWidget(m_textEdit);
    setLayout(layout);
    resize(600, 200);
}void LogWidget::outputMessage(QtMsgType type, const char *msg)
{    static QMutex mutex;
    mutex.lock();

    QString text;    switch(type)
    {    case QtDebugMsg:
        text = QString(""Debug:"");        break;    case QtWarningMsg:
        text = QString(""Warning:"");        break;    case QtCriticalMsg:
        text = QString(""Critical:"");        break;    case QtFatalMsg:
        text = QString(""Fatal:"");        break;
    }
    QString message = QString(""[%1] %2 %3"").arg(
                          QDateTime::currentDateTime().toString(                              ""yyyy-MM-dd hh:mm:ss ddd"")).arg(text).arg(msg);
    printMessage(message);
    mutex.unlock();
}

2、Qt日志输出组件的使用

#include <QApplication>#include <QDebug>#include ""LogWidget.h""/**
 * @brief 日志输出回调函数
 * @param type 参数,日志消息的级别
 * @param msg 参数,日志消息
 */void outputMessage(QtMsgType type, const char *msg){
    LogWidget::getInstance()->outputMessage(type, msg);
}int main(int argc, char *argv[]){    //注册日志消息回调函数
    qInstallMsgHandler(outputMessage);    QApplication a(argc, argv);
    LogWidget::getInstance()->show();    // 打印信息
    qDebug(""This is a debug message."");
    qWarning(""This is a warning message."");
    qCritical(""This is a critical message."");    //linux调用qFatal会导致coredump    //qFatal(""This is a fatal message"");    return a.exec();
}

3、Qt日志组件示例

C/C++知识点之Qt高级——Qt日志信息处理

三、Qt日志文件输出

1、Qt日志文件输出

#include <QApplication>#include <QDebug>#include <QTextStream>#include <QDateTime>#include <QFile>#include <QString>#include <QMutex>void outputMessage(QtMsgType type, const char* msg){    static QMutex mutex;
    mutex.lock();

    QString text;    switch(type)
    {    case QtDebugMsg:
        text = QString(""Debug:"");        break;    case QtWarningMsg:
        text = QString(""Warning:"");        break;    case QtCriticalMsg:
        text = QString(""Critical:"");        break;    case QtFatalMsg:
        text = QString(""Fatal:"");
    }

    QString context_info = QString(""File:(%1) Line:(%2)"").arg(__FILE__).arg(__LINE__);
    QString current_date_time = QDateTime::currentDateTime().toString(""yyyy-MM-dd hh:mm:ss ddd"");
    QString current_date = QString(""(%1)"").arg(current_date_time);
    QString message = QString(""%1 %2 %3 %4"").arg(text).arg(context_info).arg(msg).arg(current_date);    QFile file(""log.txt"");
    file.open(QIODevice::WriteOnly | QIODevice::Append);    QTextStream out(&file);
    out << message << ""\n"";
    file.flush();
    file.close();
    mutex.unlock();
}int main(int argc, char *argv[]){    QApplication app(argc, argv);    //注册MessageHandler
    qInstallMsgHandler(outputMessage);    //打印日志到文件中
    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();
}

C/C++知识点之Qt高级——Qt日志信息处理本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-IT技术咨询与就业发展一体化服务 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved