Qt调试信息分类和qDebug()导出到文…

2023-10-25 09:58

本文主要是介绍Qt调试信息分类和qDebug()导出到文…,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文主要参考“一去、二三里”的博文 Qt之日志输出文件和 Qt之日志输出窗口以及Qt的帮助文档,index"qInstallMessageHandler",并对他们进行了一些分析和优化。
1,"qInstallMessageHandler"的原理,应该是“publisher-subscriber”(发布/订阅模式),通过该函数将自定义的log输出函数注册到Qt的框架中,替换Qt默认的将log输出到窗口函数。因此,可以设计成如下形式,在debug模式时,log输出到控制台,而release模式,log输出到文件。
#ifndef QT_DEBUG
    g_OutputDebug.open(qPrintable(QString(QCoreApplication::applicationDirPath() + QString("/Log/log.txt"))),\
                       std::ios::out | std::ios::trunc);
    qInstallMessageHandler(outputMessage);    //注册MessageHandler
#endif    // QT_DEBUG
2,自定义的log输出函数“outputMessage”注册到Qt后,是由Qt去调用的,就像Qt输出日志到控制台一样,它会自行处理多线程的问题,故在“outputMessage”函数中,无需加锁(已验证)。Qt帮助文档中的示例就没有加锁。
3,自定义的log输出函数“outputMessage”要求是全局或类的静态函数,不能是类的成员函数,STL的functor就不支持类的成员函数。
4,为了避免反复open/close文件,可以将文件定义为全局变量。在mainwindow的构造函数中进行资源绑定和注册,见上面的代码;在mainwindow的析构函数中,进行close。
关键代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "workthread.h"
#include 
#include 

std::ofstream g_OutputDebug;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui

这篇关于Qt调试信息分类和qDebug()导出到文…的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用C#导出Excel数据并保存多种格式的完整示例

《使用C#导出Excel数据并保存多种格式的完整示例》在现代企业信息化管理中,Excel已经成为最常用的数据存储和分析工具,从员工信息表、销售数据报表到财务分析表,几乎所有部门都离不开Excel,本文... 目录引言1. 安装 Spire.XLS2. 创建工作簿和填充数据3. 保存为不同格式4. 效果展示5

Qt实现删除布局与布局切换功能

《Qt实现删除布局与布局切换功能》在Qt应用开发中,动态管理布局是一个常见需求,比如根据用户操作动态删除某个布局,或在不同布局间进行切换,本文将详细介绍如何实现这些功能,并通过完整示例展示具体操作,需... 目录一、Qt动态删除布局1. 布局删除的注意事项2. 动态删除布局的实现步骤示例:删除vboxLay

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

QT Creator配置Kit的实现示例

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

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

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

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