qt 打印日志

在 Qt Creator 中,将 QDebug、QInfo、QWarning、QCritical 和 QFatal 打印的日志输出到指定文件,需要设置 Qt 的消息处理机制。这通常涉及到安装一个自定义的消息处理器,该处理器将日志消息重定向到文件。以下是一个基本的步骤指南:

创建一个自定义消息处理器类

首先,需要创建一个继承自 QtMessageHandler 的类。这个类将重写 QtMessageHandler 的 message 函数,以便将日志消息写入文件。
CustomMessageHandler.h

// CustomMessageHandler.h  
#ifndef CUSTOMMESSAGEHANDLER_H  
#define CUSTOMMESSAGEHANDLER_H  #include <QtCore>  class CustomMessageHandler  
{  
public:  static void customMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg);  
};  #endif // CUSTOMMESSAGEHANDLER_H

然后,在 .cpp 文件中,将包含这个头文件,并实现静态函数 customMessageOutput

// CustomMessageHandler.cpp  
#include "CustomMessageHandler.h"  
#include <QFile>  
#include <QTextStream>  
#include <QDateTime>  void CustomMessageHandler::customMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)  
{  // 打开文件,确保文件存在并具有写入权限  QFile file("path/to/your/logfile.txt");  if (!file.open(QIODevice::Append | QIODevice::Text)) {  return;  }  // 根据消息类型添加前缀  QString text;  switch (type) {  case QtDebugMsg:  text = QString("Debug: %1").arg(msg);  break;  case QtInfoMsg:  text = QString("Info: %1").arg(msg);  break;  case QtWarningMsg:  text = QString("Warning: %1").arg(msg);  break;  case QtCriticalMsg:  text = QString("Critical: %1").arg(msg);  break;  case QtFatalMsg:  text = QString("Fatal: %1").arg(msg);  // 注意:QtFatalMsg 会导致应用程序终止,因此这里可能无法写入完整的消息  break;  default:  text = msg;  break;  }  // 写入文件并关闭  QTextStream out(&file);  out << QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz ") << text << endl;  file.close();  
}

最后,在main.cpp 文件中,需要在 main 函数开始处安装这个自定义消息处理器:

#include <QCoreApplication>  
#include "CustomMessageHandler.h"  int main(int argc, char *argv[])  
{  QCoreApplication a(argc, argv);  // 安装自定义消息处理器  qInstallMessageHandler(CustomMessageHandler::customMessageOutput);  // 安装自定义消息处理器qInstallMessageHandler(CustomMessageHandler::customMessageOutput);qInfo() << "Application started";//输出一般性信息,用于记录应用程序运行过程中的常规信息,帮助开发者了解程序执行流程。qDebug() << "Variable value ";//主要用于调试目的,输出详细的调试信息。qWarning() << "Invalid input detected, using default value";//输出警告信息,表示程序运行过程中出现了潜在的问题,但并没有阻止程序继续执行qCritical() << "Critical failure in network connection";//输出严重错误信息,强调程序发生了严重的、可能会导致程序异常或严重影响程序功能的情况,但程序仍然能够运行并可能有机会尝试恢复。// qFatal("Unrecoverable system error occurred");//输出致命错误信息,表示发生了非常严重、无法恢复的错误,通常这类错误会导致程序立即终止// ... 你的应用程序代码 ...  return a.exec();  
}

结果查看:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/799918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity-超级方便的Excel 读写插件

超级无敌棒棒糖&#x1f58c; &#x1f32d;功能介绍&#x1f355; Demo准备一个数据类准备一个Excel导入Excel行数据转换导出到Excel &#x1f371;新增映射字段类型 &#x1f32d;功能介绍 &#x1f4a1;.Excel 行数据转对象&#xff1a;把导入的Excel 每一行数据进行自动映…

边缘智能网关为企业数字化转型提供强有力支持-天拓四方

一、企业背景 随着信息技术的飞速发展&#xff0c;企业对于数据处理和通信的需求日益增长。特别是在工业4.0、智能制造等领域&#xff0c;企业面临着海量的数据采集、实时分析、远程监控等挑战。传统的中心化数据处理模式已难以满足这些需求&#xff0c;企业需要寻求一种更加高…

spring加载类初始化顺序

今天看spring官网的时候&#xff0c;提到了Ordered执行顺序。我当时记得PostConstruct注解会在bean加载后执行&#xff0c;现在又来了一个执行顺序&#xff0c;直接给我整蒙了。 于是我写了一个简单的dom来看看&#xff0c;它是什么&#xff1a; Service("t2ServerImpl&q…

编程新手必看,学习python中元组数据类型内容(10)

1、Python3 元组 Python中的元组是一个不可变的序列类型&#xff0c;用于存储一组有序的数据。 元组的主要特点包括&#xff1a; 不可变性&#xff1a;一旦创建&#xff0c;元组的内容不能更改&#xff0c;这使得它们成为保护数据不被修改的理想选择。有序性&#xff1a;元组…

Git - 如何重置或更改 Git SSH 密钥的密码?

Git 使用 ssh 方式拉取代码时&#xff0c;报 ssh password login&#xff0c;提示输入密码&#xff0c;这时很容易误填为 Git 的登录密码&#xff0c;其实这时需要输入 SSH 证书的密码&#xff0c;下面直接提供更改以及重新导入证书的方式。 首先需要确认你的本地是否有 SSH 钥…

隐藏在计算过程中的数据超限

【题目描述】 输入两个正整数&#xff0c;输出&#xff0c;保留5位小数。输入包含多组数据&#xff0c;结束标记为n&#xff1d;m&#xff1d;0。提示&#xff1a;本题有陷阱。 【样例输入】 2 4 65536 655360 0 0 【样例输出】 Case 1: 0.42361 Case 2: 0.00001 【题…

学习记录14-运算放大器2

目录 前言 一、理想放大器 二、虚断 二、虚短 虚短的两个使用条件 1.虚短概念 2.如果我们将运放的同相端和反相端颠倒会怎样呢&#xff1f; 总结 前言 主要讲述运算放大器的虚短虚断 一、理想放大器 如果没有基础或只是想简单了解&#xff0c;可以看我前一篇文章&am…

vue项目初始化和部署

目录 1. 技术简介... 2 2. 安装Node.js. 3 3. 全局安装Vue CLI (脚手架工具) 5 4. 创建一个新的Vue项目... 6 5. 在阿里云虚拟机安装和配置Nginx. 9 6. 将Vue项目打包部署到Nginx下... 14 7. 访问部署的项目... 14 1. 技术简介 Vue.js&#xff08;通常简称为Vue&#x…

java算法day46 | 动态规划part08 ● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!

139.单词拆分 完全背包问题&#xff0c;只不过装入背包时需要附加一个判断条件。 class Solution {public boolean wordBreak(String s, List<String> wordDict) {boolean[] dpnew boolean[s.length()1];dp[0]true;for(int j1;j<s.length();j){for(int i0;i<wordD…

每日一题(力扣)---插入区间

官方网址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表 intervals&#xff0c;其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束&#xff0c;并且 intervals按照 st…

外包干了6天,技术明显进步

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了南京一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…

正则表达式替换<>中的内容

有 xml的字典如下&#xff1a; <sys:String x:Key"ButtonLogin">登录</sys:String> <sys:String x:Key"ButtonCancel">取消</sys:String> <sys:String x:Key"ButtonLive">实时成像</sys:String> 想…

使用单点登录(SSO)如何提高安全性和用户体验

什么是单点登录&#xff08;SSO&#xff09; 对于所有大量采用云应用程序的组织来说&#xff0c;有效的身份管理是一个巨大的挑战&#xff0c;如果每个 SaaS 应用程序的用户身份都是独立管理的&#xff0c;则用户必须记住多个密码&#xff0c;技术支持技术人员在混合环境中管理…

文档管理系统解决方案(word原件)

1.系统概述 1.1.需求描述 1.2.需求分析 1.3.重难点分析 1.4.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 数据备份技术 3.系统功能设计 3.1.功能清单列表 3.2.基础数据管理 3.3.位置管理 3.4.文档使用 3.5.文档管理 软件全套资料包获取方式①&#xff1a;软件项…

Pytorch数据结构:Tensor(张量)及其维度和数据类型

文章目录 Tensor基础1.1、Tensor的维度&#xff08;Dimensions&#xff09;1.1.1、举例说明1.1.2、高维Tensor 1.2、.dim()和.size()方法1.2.1、.dim()方法1.2.2、.size()方法1.2.3、.shape属性1.2.3、示例代码1.2.3.1、一维Tensor1.2.3.2、二维Tensor1.2.3.3、三维Tensor 1.3、…

Adobe InDesign 2024 v19.3 (macOS, Windows) - 版面设计和桌面出版软件

Adobe InDesign 2024 v19.3 (macOS, Windows) - 版面设计和桌面出版软件 Acrobat、After Effects、Animate、Audition、Bridge、Character Animator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、Lightroom Classic、Media Encoder、Photoshop、Premiere Pro、Ad…

如何魔改 diffusers 中的 pipelines

如何魔改 diffusers 中的 pipelines 整个 Stable Diffusion 及其 pipeline 长得就很适合 hack 的样子。不管是通过简单地调整采样过程中的一些参数&#xff0c;还是直接魔改 pipeline 内部甚至 UNet 内部的 Attention&#xff0c;都可以实现很多有趣的功能或采样生图结果。 本…

深入了解图片Base64编码

title: 深入了解图片Base64编码 date: 2024/4/8 10:03:22 updated: 2024/4/8 10:03:22 tags: Base64编码图片转换HTTP请求前端开发移动应用性能优化图片压缩 1. 什么是Base64编码 Base64编码是一种将二进制数据转换为文本字符串的编码方式&#xff0c;通过将数据转换为一种可…

安全威胁情报的漏洞挖掘

前段时间edu上出现了两个网安总队收取安全情报&#xff0c;不收漏洞&#xff0c;下面简单分析一下如何挖掘安全情报。 在发现在edu中新增了两个网安总队收安全情报等漏洞&#xff0c;那威胁情报又会包含哪些内容呢&#xff1f;以前或许会看到各种ss网站、bc网站、yx网站满天飞&…

【数据库总结】

文章目录 1.数据库介绍2.数据库的语法使用数据库语法数据库的执行过程 3.数据库的索引介绍索引的介绍索引创建注意点&#xff1a;索引失效的情况索引不适合哪些场景呢&#xff1f;索引是不是建的越多越好呢&#xff1f;索引的数据结构为什么要用 B 树&#xff0c;而不用普通二叉…