• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Qt输出打印信息的日志到文件两种方式

武飞扬头像
Qt程序员
帮助1

效果:

学新通

1、利用ofstream文件写操作,将内存数据写入存储文件。

找到main.cpp:

①、增加头文件引用:

  1.  
    #include <QDateTime>
  2.  
    #include <QDebug>
  3.  
    #include <fstream> // std::ofstream

②、增加全局变量:

std::ofstream g_OutputDebug;

③、定义函数:

  1.  
    void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
  2.  
    {
  3.  
    // 加锁
  4.  
    static QMutex mutex;
  5.  
    mutex.lock();
  6.  
    QString text;
  7.  
    switch(type) {
  8.  
    case QtDebugMsg:
  9.  
    text = QString("Debug: ");
  10.  
    break;
  11.  
    case QtWarningMsg:
  12.  
    text = QString("Warning: ");
  13.  
    break;
  14.  
    case QtCriticalMsg:
  15.  
    text = QString("Critical:");
  16.  
    break;
  17.  
    case QtFatalMsg:
  18.  
    text = QString("Fatal: ");
  19.  
    break;
  20.  
    default:
  21.  
    text = QString("Debug: ");
  22.  
    }
  23.  
     
  24.  
    QString context_info = QString("F:(%1) L:(%2)").arg(QString(context.file)).arg(context.line); // F文件信息L行数
  25.  
    QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
  26.  
    QString current_date = QString("(%1)").arg(current_date_time);
  27.  
    std::string message = qPrintable(QString("%1 %2 \t%3 \t%4").arg(text).arg(context_info).arg(current_date).arg(msg));
  28.  
    g_OutputDebug << message << "\r\n"; // std::ofstream
  29.  
    // 解锁
  30.  
    mutex.unlock();
  31.  
    }
学新通

学习Qt开发不知道做什么?UP主为大家整理的这些领域都涉及到Qt开发:嵌入式领域、桌面端开发、移动端、微控制器MCU、客户端(游戏、直播等等)、汽车领域行业、 消费类电子设备、医疗领域行业、工业自动化领域等等

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C 语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C 数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制

学习Qt开发不知道做什么?UP主为大家整理的这些领域都涉及到Qt开发:嵌入式领域、桌面端开发、移动端、微控制器MCU、客户端(游戏、直播等等)、汽车领域行业、 消费类电子设备、医疗领域行业、工业自动化领域等等

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C 语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C 数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制

④、增加注册信息及记录到文件中:

  1.  
    int main(int argc, char *argv[])
  2.  
    {
  3.  
    //注册MessageHandler
  4.  
    qInstallMessageHandler(outputMessage); //注册MessageHandler
  5.  
    g_OutputDebug.open(qPrintable(QString(QString(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss").append("-log.txt")))), std::ios::out | std::ios::trunc);
  6.  
     
  7.  
    QApplication a(argc, argv);
  8.  
    MainWindow w;
  9.  
    w.show();
  10.  
    return a.exec();
  11.  
    }

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C 语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

2、利用QFile记录文件

  1.  
    ①、增加头文件引用:
  2.  
    #include <QDateTime>
  3.  
    #include <QDebug>
  4.  
     
  5.  
    #include <QFile>

②、定义函数:

  1.  
    void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
  2.  
    {
  3.  
    // 加锁
  4.  
    static QMutex mutex;
  5.  
    mutex.lock();
  6.  
    QByteArray localMsg = msg.toLocal8Bit();
  7.  
    QString text;
  8.  
    switch(type) {
  9.  
    case QtDebugMsg:
  10.  
    text = QString("Debug: ");
  11.  
    break;
  12.  
    case QtWarningMsg:
  13.  
    text = QString("Warning: ");
  14.  
    break;
  15.  
    case QtCriticalMsg:
  16.  
    text = QString("Critical:");
  17.  
    break;
  18.  
    case QtFatalMsg:
  19.  
    text = QString("Fatal: ");
  20.  
    break;
  21.  
    default:
  22.  
    text = QString("Debug: ");
  23.  
    }
  24.  
     
  25.  
    // 设置输出信息格式
  26.  
    QString context_info = QString("F2:(%1) L:(%2)").arg(QString(context.file)).arg(context.line); // F文件L行数
  27.  
    QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
  28.  
    QString strMessage = QString("%1 %2 \t%3 \t%4").arg(text).arg(context_info).arg(strDateTime).arg(msg);
  29.  
    // 输出信息至文件中(读写、追加形式)
  30.  
    QFile file(CODE_SYSTEM_BACKER_PATH QString(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss").append("-log.txt")));
  31.  
    file.open(QIODevice::ReadWrite | QIODevice::Append);
  32.  
    QTextStream stream(&file);
  33.  
    stream << strMessage << "\r\n";
  34.  
    file.flush();
  35.  
    file.close();
  36.  
    // 解锁
  37.  
    mutex.unlock();
  38.  
    }
学新通

学习Qt开发不知道做什么?UP主为大家整理的这些领域都涉及到Qt开发:嵌入式领域、桌面端开发、移动端、微控制器MCU、客户端(游戏、直播等等)、汽车领域行业、 消费类电子设备、医疗领域行业、工业自动化领域等等

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C 语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C 数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制

③、增加注册信息:

  1.  
    int main(int argc, char *argv[])
  2.  
    {
  3.  
    //注册MessageHandler
  4.  
    qInstallMessageHandler(outputMessage); //注册MessageHandler
  5.  
     
  6.  
    QApplication a(argc, argv);
  7.  
    MainWindow w;
  8.  
    w.show();
  9.  
    return a.exec();
  10.  
    }

这样,我们就得到了输出日志了。(注:Release版本稍许有些不同,需要引用DEFINES = QT_MESSAGELOGCONTEXT到Pro中)

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C 语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcabkf
系列文章
更多 icon
同类精品
更多 icon
继续加载