《QT从基础到进阶·三十八》QWidget实现炫酷log日志打印界面
QWidget实现了log日志的打印功能,不仅可以在界面显示,还可以生成打印日志。先来看下效果,源码放在文章末尾:
LogPlugin插件类管理log所有功能,它可以获取Log界面并能打印正常信息,警告信息和错误信息,下面是它的接口描述:
class LOGGINGWRAPPER_EXPORT LogPlugin
{
public:virtual ~LogPlugin() {}virtual void Info(std::string message) = 0; //打印绿色正常信息virtual void Warn(std::string message) = 0; //打印黄色警告信息virtual void Error(std::string message) = 0; //打印红色错误信息virtual QWidget* GetLogWidget() = 0; //获取Log界面virtual void SetParent(QWidget* widget) = 0; //设置父窗口
};
使用方法:
1、创建LogPlugin对象
LogPlugin是QPlugin插件实现,可以通过QPlugin读取LogPlugin.dll,把读到的QObject指针强转为LogPlugin对象。插件的使用可以看之前的篇章。
LogPlugin* logPlugin = qobject_cast<LogPlugin*>(objectPtr);
当然也可以直接new一个LogPlugin对象。
2、把Log界面放在收缩栏中
我把log界面放在了收缩栏中,可以看到鼠标点击log界面可以收起,再次点击可以展开,收缩栏的实现前面文章已经讲解过,这里不在赘述。QWidget实现收缩栏效果
CollpasePagePlugin* collpasePagePlugin = qobject_cast<CollpasePagePlugin*>(objectPtr_);if (logPlugin && collpasePagePlugin){collpasePagePlugin->GetWidget()->setParent(ui.centralWidget);collpasePagePlugin->SetLayout(m_centerQVBoxLayout, -1); //Put the folded plug-in into the layout}
上面代码先创建收缩栏对象,并设置收缩栏的父窗口和垂直布局,-1代表放置在收缩栏中的界面放在布局的最上层位置。
logPlugin->SetParent(collpasePagePlugin->GetWidget()); //Set Parent Class
QWidget* widget = logPlugin->GetLogWidget();//Put the Logwidget into the folding plug-in
collpasePagePlugin->addWidget(widget, "Log", QIcon(":/Gen2WGMTFTester/images/routine/log.jpg"));
SetParent把log界面的父窗口设为收缩栏,并通过addWidget把Log窗口添加到收缩栏中显示
3、打印log信息
logPlugin->Info("green is normal");
logPlugin->Warn("yellow is warning");
logPlugin->Error("red is error");
这里分别打印绿色正常信息,黄色警告信息和红色错误信息。
想在项目下生成Log日志还需要做如下设置:
(1)在mainwindow主程序目录下创建config文件夹并把logconfig.properites文件拷贝进去
(2)附加包含目录添加logplus头文件目录
(3)附加库目录添加logplus的lib目录
(4)附加依赖项添加debug或release的lib文件名
记得更改下logplus.cpp下面的lib路径
源码下载

相关文章:

《QT从基础到进阶·三十八》QWidget实现炫酷log日志打印界面
QWidget实现了log日志的打印功能,不仅可以在界面显示,还可以生成打印日志。先来看下效果,源码放在文章末尾: LogPlugin插件类管理log所有功能,它可以获取Log界面并能打印正常信息,警告信息和错误信息&…...

JVM的小知识总结
加载时jvm做了这三件事: 1)通过一个类的全限定名来获取该类的二进制字节流 什么是全限定类名? 就是类名全称,带包路径的用点隔开,例如: java.lang.String。 即全限定名 包名类型 非限定类名也叫短名,就…...

深入理解JVM虚拟机第二十六篇:详解JVM当中的虚方法和非虚方法,并从字节码指令的角度去分析虚方法和非虚方法
😉😉 学习交流群: ✅✅1:这是孙哥suns和树哥给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824 📚📚 微信:DashuDeveloper拉你进微信群,免费领取! 一:非虚方法和虚方法 方法…...
ElasticSearch的日志配置
ElasticSearch默认情况下使用Log4j2来记录日志,日志配置文件的路径为$ES_HOME/config/log4j2.properties,配置方法见Log4j2的官方文档。 参考path-settings,通过指定path.logs,可以指定日志文件的保存路径。 在日志配置文件$ES_…...

SQL Injection (Blind)`
SQL Injection (Blind) SQL Injection (Blind) SQL盲注,是一种特殊类型的SQL注入攻击,它的特点是无法直接从页面上看到注入语句的执行结果。在这种情况下,需要利用一些方法进行判断或者尝试,这个过程称之为盲注。 盲注的主要形式有…...

NX二次开发UF_CURVE_ask_trim 函数介绍
文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_trim Defined in: uf_curve.h int UF_CURVE_ask_trim(tag_t trim_feature, UF_CURVE_trim_p_t trim_info ) overview 概述 Retrieve the current parameters of an a…...

linux的netstat命令和ss命令
1. 网络状态 State状态LISTENING监听中,服务端需要打开一个socket进行监听,侦听来自远方TCP端口的连接请求ESTABLISHED已连接,代表一个打开的连接,双方可以进行或已经在数据交互了SYN_SENT客户端通过应用程序调用connect发送一个…...

python:傅里叶分析,傅里叶变换 FFT
使用python进行傅里叶分析,傅里叶变换 FFT 的一些关键概念的引入: 1.1.离散傅里叶变换(DFT) 离散傅里叶变换(discrete Fourier transform) 傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心&…...
云原生系列Go语言篇-编写测试Part 2
基准测试 确定代码是快或慢非常复杂。我们不用自己计算,应使用Go测试框架内置的基准测试。下面来看第15章的GitHub代码库sample_code/bench目录下的函数: func FileLen(f string, bufsize int) (int, error) {file, err : os.Open(f)if err ! …...
CMake Error:No targets specified and no makefile found
在适用cmake构建项目的时候,突然遇到了这个报错 Make Error at CMakeLists.txt:1 (project): VERSION not allowed unless CMP0048 is set to NEW – Configuring incomplete, errors occurred! make: *** No targets specified and no makefile found. Stop. CMake…...

常见树种(贵州省):019滇白珠、杜茎山、苍山越桔、黄背越桔、贵州毛柃、半齿柃、钝叶柃、细枝柃、细齿叶柃木、土蜜树、山矾、胡颓子、檵木
摘要:本专栏树种介绍图片来源于PPBC中国植物图像库(下附网址),本文整理仅做交流学习使用,同时便于查找,如有侵权请联系删除。 图片网址:PPBC中国植物图像库——最大的植物分类图片库 一、滇白珠…...
java - 定时器
一、什么是定时器 定时器是指可以通过 Java 中的 Timer 类和 TimerTask 类所提供的功能来实现定期执行某些任务的工具。 标准库中提供了一个 Timer 类 . Timer 类的核心方法为 schedule . schedule 包含两个参数 . 第一个参数指定即将要执行的任务代码 , 第二个参数指定多…...

jQuery【菜单功能、淡入淡出轮播图(上)、淡入淡出轮播图(下)、折叠面板】(五)-全面详解(学习总结---从入门到深化)
目录 菜单功能 淡入淡出轮播图(上) 淡入淡出轮播图(下) 折叠面板 菜单功能 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><…...
攻防非对称问题| 当前企业面临的网络攻防非对称问题及其解决途径
随着信息技术的不断发展,网络已经成为我们日常生活和商业活动中不可或缺的一部分。然而,随之而来的是网络安全问题的不断升级。网络攻防非对称问题是当前亟待解决的一个复杂而严峻的挑战。其主要的表现是攻击成本远低于防御成本以及相同投入带来的攻击能…...

Java多线程二-线程安全
1、线程安全问题 多个线程,同时操作同一个共享资源的时候,可能会出现业务安全问题。 2、实例:取钱的线程安全问题 2.1、场景 小明和小红是夫妻,他们有个共同账户,余额是十万元,如果两人同时取钱并且各自取…...
Rust个人学习之结构体
第一反应,Rust结构体跟python的很像,不知道感觉对不对; 书中提到第一反应,Rust结构体跟python的很像,不知道感觉对不对; 书中提到:结构体是一种自定义数据类型,它允许命名多个相关的…...
kafka详细讲解与安装
Kafka是一种分布式流处理平台,具有高吞吐量、可扩展性和容错性。它最初由LinkedIn开发,现已成为Apache软件基金会的顶级项目。Kafka广泛应用于实时数据流处理、日志收集、消息队列等场景。 以下是关于Kafka的简要讲解和安装步骤: 一、Kafka…...

在我国干独立游戏开发有多难?
游戏独立开发在中国,一直以来都是一条充满挑战的道路。尽管有着无限的激情和创意,但面对市场、资金、政策等多方面的困难,许多独立开发者在这条路上艰难前行。 首先,市场竞争激烈是中国游戏独立开发者面临的首要挑战。随着游戏产…...
不可错过的网上宝藏:2023年必看的顶级资源大盘点!
亲爱的“AI uTools”读者们,大家好! 在这个信息爆炸的时代,互联网上充满了无数的资源,但如何从这海量信息中挑选出真正有用的宝藏呢?今天,我为大家精心挑选了一系列优质网站资源,涵盖了从文本处…...

日本服务器访问速度和带宽有没有直接关系?
对于许多网站和应用程序来说,服务器的访问速度是至关重要的。用户希望能够快速加载页面、上传和下载文件,而这些都与服务器的带宽有关。那么,日本服务器的访问速度和带宽之间是否存在直接关系呢? 我们需要了解什么是带宽。带宽是指网络…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...

rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...

PydanticAI快速入门示例
参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...