qt激光加工软件开发——日志模块
本篇主要介绍该加工软件的日志模块
实现的功能:
主界面日志栏显示
分级显示
本地保存
简单的调用机制
目前选择的是qInstallMessageHandler,毕竟是qt亲儿子(Qt 5.0以上版本)QMutex保证线程安全
消息的格式化,目前主要是debug与warning,主页面显示会做颜色区分
信号logMessageReceived,在每次捕获到日志消息时发出,暂时不需要异步调用槽
以下为该类主要代码
点击查看代码
static void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
Q_UNUSED(context)
CustomMessageHandler* handler = CustomMessageHandler::instance(); // 这是一个假设的方法,你需要自己实现它
if (handler) {
QMutexLocker locker(&handler->mutex);
QString logMessage;
QDateTime currentTime = QDateTime::currentDateTime();
QString formattedTime = currentTime.toString("yyyy-MM-dd HH:mm:ss ");
switch (type) {
case QtDebugMsg:
logMessage = QString("%1:%2").arg(formattedTime).arg(msg);
break;
case QtInfoMsg:
logMessage = QString("Info:%1").arg(msg);
break;
case QtWarningMsg:
logMessage = QString("%1 warning %2").arg(formattedTime).arg(msg);
break;
case QtCriticalMsg:
logMessage = QString("Critical: %1").arg(msg);
break;
case QtFatalMsg:
logMessage = QString("Fatal: %1").arg(msg);
abort(); // Or handle fatal messages as needed
break;
}
handler->logStream << logMessage << "\n";
handler->logStream.flush();
emit handler->logMessageReceived(logMessage);
}
}
界面显示设定
点击查看代码
// 使用互斥锁来避免在更新QTextEdit时的竞态条件
QMutexLocker locker(&textEditMutex);
bool contains = message.contains("warning");
if(contains)
{
QTextCharFormat redFormat;
redFormat.setForeground(Qt::red);
ui->textEdit_log->setCurrentCharFormat(redFormat);
}
else
{
QTextCharFormat blackFormat;
blackFormat.setForeground(Qt::black);
ui->textEdit_log->setCurrentCharFormat(blackFormat);
}
ui->textEdit_log->append(message);
主进程中写好信号与槽,并注册就可以运行了
最终效果:
qt激光加工软件开发——日志模块的更多相关文章
- [转]软件开发规范—模块开发卷宗(GB8567——88)
做软件开发是有那么一套国准可参照的,当然就是那些文档了,这里列出一下所有软件开发的规范文档: 操作手册 用户手册 软件质量保证计划 软件需求说明书 概要设计说明书 开发进度月报 测试计划文档 测试分析 ...
- python中软件开发规范,模块,序列化随笔
1.软件开发规范 首先: 当代码都存放在一个py文件中时会导致 1.不便于管理,修改,增加 2.可读性差 3.加载速度慢 划分文件1.启动文件(启动接口)--starts文件放bin文件里2.公共文件 ...
- SNF软件开发机器人产品白皮书
软件开发机器人 产品白皮书 使用说明书 模块名称:软件开发机器人 模块编号:12 项目负责人:王金斗 所属部门:技术中心 文档编制: 编制日期:2018-02-02 文档审核:王金斗 审核日期: 文档 ...
- 【大型软件开发】浅谈大型Qt软件开发(二)面向未来开发——来自未来的技术:COM组件。我如何做到让我们的教学模块像插件一样即插即用,以及为什么这么做。
前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...
- python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)
一.模块的循环导入问题 run.py # import m1 # 第一次导入 m1.py # 错误示范 ''' print('正在导入m1') from m2 import y #第一次导入m2 x= ...
- Python模块的导入以及软件开发规范
Python文件的两种用途 1 . 当脚本直接使用,直接当脚本运行调用即可 def func(): print("from func1") func() 2 . 当做模块被导入使用 ...
- Python 全栈开发九 日志模块
日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件也有重要性的概念 ...
- python开发调用基础:模块的调用&制作包&软件开发规范
一,包的调用 #!/usr/bin/env python #_*_coding:utf-8_*_ #调用 glance[1..4]\api\policy.py 路径 # policy.py 内容 # ...
- python 之 软件开发目录规范 、logging模块
6.4 软件开发目录规范 软件(例如:ATM)目录应该包含: 文件名 存放 备注 bin start.py,用于起动程序 core src.py,程序核心功能代码 conf settings. ...
- Python模块:Re模块、附软件开发目录规范
Re模块:(正则表达式) 正则表达式就是字符串的匹配规则 正则表达式在多数编程语言里都有相应的支持,Python里面对应的模块时re 常用的表达式规则:(都需要记住) “ . ” # 默认匹配除 ...
随机推荐
- libvirt和qga的区别?
本文分享自天翼云开发者社区<libvirt和qga的区别?>,作者:乐道 Libvirt是一个开源项目,提供了一组API.工具.库,用于管理和控制虚拟化平台. 在Openstack环境中, ...
- idea 登录提示Server's certificate is not trusted
原因:你本地的idea证书不可以 解决方式1: 你去安装一个正版的: 解决方式2: 设置接受不受信任证书即可. AS:File - Settings - Tools - Server Certific ...
- python ImportError: libGL.so.1: cannot open shared object file: No such file or directory
前言 python 报错python ImportError: libGL.so.1: cannot open shared object file: No such file or director ...
- php处理跨域
1.允许所有域名访问 header('Access-Control-Allow-Origin: *'); 2.允许单个域名访问 header('Access-Control-Allow-Origin: ...
- React Props指南:从基础到高阶应用的最佳实践解析
在 React 中,Props(属性)是组件间通信和数据传递的核心机制.通过合理使用 Props,开发者可以构建动态.可复用且易于维护的组件体系.本文将深入探讨 Props 的核心概念.使用方法及最佳 ...
- macOS 字体文件所在路径
目录 用户字体路径/Library/Fonts 系统字体路径/System/Library/Fonts macOS font 也就是字体文件,有2个可用路径 这里以 macOS Monterey 版本 ...
- expected at least 1 bean which qualifies as autowire candidate
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'log ...
- 🎀idea - properties文件unicode中文显示
简介 idea中properties文件中文默认展示为unicode码 unicode 中文展示为 \u开头的ASCII 调整中文显示 idea -> settings -> Editor ...
- Launchpool名词解释
# 一.什么是Launchpool Launchpool是一种加密货币领域的创新机制,通常由交易所或DeFi平台提供,允许用户通过质押(staking)或锁定特定代币来获得新项目的代币奖励. ## L ...
- WPF静态资源StaticResource和动态资源DynamicResource有什么区别,x:Static又是什么意思?
什么叫WPF的资源(Resource) 资源是保存在可执行文件中的一种不可执行数据.WPF中资源用ResourceDictionary类表示,这个类就是一个字典,字典的key和value都是objec ...