Qt如何将系统中使用的qDebug、qWarning等输出的信息显示到自定义的界面上或保存到文件中

devtools/2024/12/26 3:57:09/

一、界面中添加一个QTextBrowser
在这里插入图片描述
二、相关源码
.hpp

#ifndef LOGLOOKWIDGET_H
#define LOGLOOKWIDGET_H#include <QWidget>
#include <QMutex>
#include <iostream>
#include <QFile>
#include <QTextStream>
#include <QTime>
#include <QFontDialog>namespace Ui {
class LogLookWidget;
}class LogLookWidget : public QWidget
{Q_OBJECT
signals:void messageOutputSignal(QtMsgType type, int line, QString file, const QString &msg);
public:explicit LogLookWidget(QWidget *parent = nullptr);~LogLookWidget();
private:void controlInit();static void messageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg);
private slots:void messageOutputSlot(QtMsgType type, int line, QString file, const QString &msg);
private:Ui::LogLookWidget *ui;static LogLookWidget *instance;QFile *logFile = nullptr;QTextStream *logStream = nullptr;
};#endif // LOGLOOKWIDGET_H

.cpp

#include "logLookWidget.h"
#include "ui_logLookWidget.h"LogLookWidget *LogLookWidget::instance = nullptr;LogLookWidget::LogLookWidget(QWidget *parent) :QWidget(parent),ui(new Ui::LogLookWidget)
{ui->setupUi(this);instance = this;this->controlInit();
}LogLookWidget::~LogLookWidget()
{qInstallMessageHandler(nullptr);delete ui;
}void LogLookWidget::controlInit()
{this->setWindowTitle(tr("日志查看"));qInstallMessageHandler(LogLookWidget::messageOutput)connect(instance,&LogLookWidget::messageOutputSignal,this,&LogLookWidget::messageOutputSlot);
}void LogLookWidget::messageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{emit instance->messageOutputSignal(type,context.line,context.file,msg);
}void LogLookWidget::messageOutputSlot(QtMsgType type, int line, QString file, const QString &msg)
{static QMutex mutex;mutex.lock();QString tag;QString time;QString fileAndLine;switch(type){case QtDebugMsg:tag = QString("%1").arg("D/",-5);break;case QtInfoMsg:tag = QString("%1").arg("I/",-5);break;case QtWarningMsg:tag = QString("%1").arg("W/",-5);break;case QtCriticalMsg:tag = QString("%1").arg("E/",-5);break;case QtFatalMsg:tag = QString("%1").arg("F/",-5);break;}time = QString("%1").arg("["+QTime::currentTime().toString("hh:mm:ss.zzz")+"]",-15);fileAndLine = QString("%1").arg("("+file.split("\\").last()+":"+QString::number(line)+")",-35,' ');QString logMsg;logMsg.append(tag);logMsg.append("  ");logMsg.append(time);logMsg.append("  ");logMsg.append(fileAndLine);logMsg.append("  ");logMsg.append(msg);// std::cout<<logMsg.toStdString();//将信息显示到界面上this->ui->textBrowser->append(logMsg);logMsg.append("\n");//将信息保存到文件中if(this->logStream)*this->logStream<<logMsg;mutex.unlock();
}

注意:
1、函数messageOutput只能是静态成员函数或外部函数。
2、static LogLookWidget *instance的作用是通过信号与槽的方法将信息转到类内成员函数,从而完成将信息显示到界面。
3、qInstallMessageHandler(LogLookWidget::messageOutput)的作用是将信息输出载体转化到messageOutput这个函数上,对应的qInstallMessageHandler(nullptr);是取消。


http://www.ppmy.cn/devtools/145432.html

相关文章

Linux 静默安装weblogic及JDK安装

提示&#xff1a;虚拟机CentOS7环境下操作 文章目录 一、JDK安装 1.下载jdk地址2…创建路径-把jdk移动进去3.移动桌面行的jdk包移动到这个文件中4.解压jdk5.配置环境变量 二、安装weblogic 2.1.查看有没有安装jdk2.2创建weblogic用户2.3.在opt目录下创建一个weblogic目录2.4.把…

MySQL-MVCC(多版本并发控制)

MySQL中的MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是一种并发控制机制&#xff0c;用于提供读-写冲突时的可靠读取。 MVCC通过保存数据在某个时间点的快照来实现这一点&#xff0c;从而避免了传统的锁定方法。在InnoDB存储引擎中&#xff0c;MVCC是通过…

Vue项目重构实践:如何构建可维护的企业级应用

在企业级前端开发中&#xff0c;需求变更是常态。如何构建一个易于维护和扩展的Vue项目&#xff0c;避免需求变化时大规模重构&#xff0c;是每个前端开发者都需要面对的挑战。本文将从实践角度&#xff0c;分享一些行之有效的架构设计策略。 1. 核心策略 1.1 组件化设计 将…

R 常用的内置软件包及功能介绍

R 中有许多内置包&#xff0c;提供了丰富的功能来帮助用户进行数据分析、统计建模、图形可视化等任务。以下是一些常用的内置包及其功能简介&#xff1a; 1. stats 包 stats 是 R 的一个核心包&#xff0c;几乎每个 R 用户都会使用它。它包含了许多统计分析的函数&#xff0c…

在极端低温环境下,4G太阳能监控的光伏电池板效率会如何变化?

在当今社会&#xff0c;可再生能源的开发与利用已成为全球关注的焦点。其中&#xff0c;太阳能作为一种清洁、无污染的能源形式&#xff0c;其开发利用备受瞩目。光伏电池板作为太阳能发电的核心部件&#xff0c;其性能与效率直接关系到太阳能发电系统的整体表现。 光伏电池板…

imu相机EKF

ethzasl_sensor_fusion/Tutorials/Introductory Tutorial for Multi-Sensor Fusion Framework - ROS Wiki https://github.com/ethz-asl/ethzasl_msf/wiki

勒索病毒典型传播途径与预防建议

一、勒索病毒典型传播途径 &#xff08;一&#xff09;网站挂马 用户浏览挂有木马病毒的网站&#xff0c;上网终端计算机系统极可能被植入木马并感染上勒索病毒。 &#xff08;二&#xff09;邮件传播 邮件传播是目前互联网上常见的病毒传播方式。攻击者通过利用当前热门字…

Suno Api V4模型无水印开发「综合实战开发自己的音乐网站」 —— 「Suno Api系列」第14篇

历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中&#xff0c;支持120并发任务 Suno Api V4模型无水印开发「灵感模式」 —— 「Suno Api系列」第1篇 Suno Api V4模型无水印开发「自定义模式」 —— 「Suno Api系列」第2篇 Suno Api V4模型无水印开发「AI生成歌词」…