摘要:本文主要向大家介绍了C/C++知识点之Qt高级——Qt日志信息处理,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之Qt高级——Qt日志信息处理,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
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所指向的回调函数截获,允许用户自己来处理输出的消息文本。
定制一个日志信息输出组件。
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(); }
#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(); }
#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+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-IT技术咨询与就业发展一体化服务 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号