学习记录-Qt将调试信息保存到文件

2024-09-06 09:32

本文主要是介绍学习记录-Qt将调试信息保存到文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果能将调试信息打印到文件,那软件发布到其他机器运行时,就可以记录软件运行的异常情况了。

查看手册,Qt 的QtMsgHandler qInstallMsgHandler ( QtMsgHandler handler )函数可以安装一个自定义的消息处理函数,自带的例子如下:

 #include <qapplication.h>#include <stdio.h>#include <stdlib.h>void myMessageOutput(QtMsgType type, const char *msg){switch (type) {case QtDebugMsg:fprintf(stderr, "Debug: %s\n", msg);break;case QtWarningMsg:fprintf(stderr, "Warning: %s\n", msg);break;case QtCriticalMsg:fprintf(stderr, "Critical: %s\n", msg);break;case QtFatalMsg:fprintf(stderr, "Fatal: %s\n", msg);abort();}}int main(int argc, char **argv){qInstallMsgHandler(myMessageOutput);QApplication app(argc, argv);...return app.exec();}

在这个例子的基础上,在myMessageOutput函数里加入将msg写入文件的代码就可以了。

以下是修改过代码:

 #include <qapplication.h>#include <stdio.h>#include <stdlib.h>void myMessageOutput(QtMsgType type, const char *msg){QString txt;QString tim = QDate::currentDate().toString("yyyyMMdd") + QTime::currentTime().toString("hhmmss") + QString("-");switch (type) {case QtDebugMsg:  //调试信息提示txt = tim + QString("Debug: %1\n").arg(msg);break;case QtWarningMsg: //一般的warning提示txt = tim + QString("Warning: %1").arg(msg);break;case QtCriticalMsg: //严重错误提示txt = tim + QString("Critical: %1").arg(msg);break;case QtFatalMsg: //致命错误提示txt = tim + QString("Fatal: %1").arg(msg);//abort();}QFile outFile("logFile.txt"); //写入文件outFile.open(QIODevice::WriteOnly | QIODevice::Append);QTextStream ts(&outFile);ts << txt << "\r\n" << endl;if(QtFatalMsg == type){abort();}}int main(int argc, char **argv){qInstallMsgHandler(myMessageOutput);QApplication app(argc, argv);...return app.exec();}

在主函数里注册了myMessageOutput函数后,再使用qDebug函数,打印输出就全部被写入到logFile.txt里面了。







这篇关于学习记录-Qt将调试信息保存到文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141642

相关文章

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr