本篇主要介绍该加工软件的日志模块

实现的功能:

  • 主界面日志栏显示

  • 分级显示

  • 本地保存

  • 简单的调用机制

    目前选择的是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激光加工软件开发——日志模块的更多相关文章

  1. [转]软件开发规范—模块开发卷宗(GB8567——88)

    做软件开发是有那么一套国准可参照的,当然就是那些文档了,这里列出一下所有软件开发的规范文档: 操作手册 用户手册 软件质量保证计划 软件需求说明书 概要设计说明书 开发进度月报 测试计划文档 测试分析 ...

  2. python中软件开发规范,模块,序列化随笔

    1.软件开发规范 首先: 当代码都存放在一个py文件中时会导致 1.不便于管理,修改,增加 2.可读性差 3.加载速度慢 划分文件1.启动文件(启动接口)--starts文件放bin文件里2.公共文件 ...

  3. SNF软件开发机器人产品白皮书

    软件开发机器人 产品白皮书 使用说明书 模块名称:软件开发机器人 模块编号:12 项目负责人:王金斗 所属部门:技术中心 文档编制: 编制日期:2018-02-02 文档审核:王金斗 审核日期: 文档 ...

  4. 【大型软件开发】浅谈大型Qt软件开发(二)面向未来开发——来自未来的技术:COM组件。我如何做到让我们的教学模块像插件一样即插即用,以及为什么这么做。

    前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...

  5. python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)

    一.模块的循环导入问题 run.py # import m1 # 第一次导入 m1.py # 错误示范 ''' print('正在导入m1') from m2 import y #第一次导入m2 x= ...

  6. Python模块的导入以及软件开发规范

    Python文件的两种用途 1 . 当脚本直接使用,直接当脚本运行调用即可 def func(): print("from func1") func() 2 . 当做模块被导入使用 ...

  7. Python 全栈开发九 日志模块

    日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件也有重要性的概念 ...

  8. python开发调用基础:模块的调用&制作包&软件开发规范

    一,包的调用 #!/usr/bin/env python #_*_coding:utf-8_*_ #调用 glance[1..4]\api\policy.py 路径 # policy.py 内容 # ...

  9. python 之 软件开发目录规范 、logging模块

    6.4 软件开发目录规范 软件(例如:ATM)目录应该包含: 文件名 存放 备注 bin start.py,用于起动程序   core src.py,程序核心功能代码   conf settings. ...

  10. Python模块:Re模块、附软件开发目录规范

    Re模块:(正则表达式) 正则表达式就是字符串的匹配规则 正则表达式在多数编程语言里都有相应的支持,Python里面对应的模块时re 常用的表达式规则:(都需要记住) “ . ”   #  默认匹配除 ...

随机推荐

  1. 如何解决ubuntu安装第三方deb出现的read unknown VMA问题(SUID sandbox配置问题)

    前言 众所不周知,ubuntu的snap有些让人无语凝噎的问题,比方说如果你在Ubuntu 24.04 LTS通过它安装vscode,恭喜你,你无法在vscode中输入中文,缘由不明,又或者对于str ...

  2. Typora换主题

    效果预览 以下就是我的 Typora 的主题,我平时使用 Vue 主题为主. 操作步骤 具体实现步骤如下: 打开偏好设置 点击外观 打开主题文件夹 粘贴样式文件到文件夹中 关键步骤截图 主题样式还可以 ...

  3. vue 保留两位小数

    前言 有时候我们需要对各种数值进行保留位数,以便于更好的展示. Html部分 template中这样使用,需要处理的字段名,再加上过滤器方法 <div class="text prim ...

  4. gitlab启动与关闭

    gitlab安装完毕后,默认开机启动,开启关闭 sudo gitlab-ctl start/stop

  5. 边缘检测及Canny算法

    对边缘的直观理解 边缘有助于我们对图像进行语义理解.直观上,边缘发生在图像强度值变化剧烈的地方 如何描述变化?自然是用导数/梯度 如上图,我们对图中的信号在水平方向上求导,可以得到右侧的导数图像,可以 ...

  6. 【VMware VCF】启动和关闭 VMware Cloud Foundation 环境的正确顺序。

    为了避免出现数据丢失以及保证 SDDC 组件的正常运行,启动和关闭 VMware Cloud Foundation 环境中的组件应该遵循特定的顺序.比如,在关闭管理工作负载域之前,应该先关闭 VI 工 ...

  7. 【SpringCloud】Ribbon负载均衡调用

    Ribbon负载均衡调用 概述 是什么 Spring Cloud Ribbon是基于Netlix Ribbon实现的一套客户端负载均衡的工具. 简单的说,Ribbon是Netflix发布的开源项目, ...

  8. 【Python】词频统计

    需求:一篇文章,出现了哪些词?哪些词出现得最多? 英文文本词频统计 英文文本:Hamlet 分析词频 统计英文词频分为两步: 文本去噪及归一化 使用字典表达词频 代码: #CalHamletV1.py ...

  9. 【EasyPR】Linux安装使用EasyPR开源车牌识别系统

    [EasyPR]Linux安装使用EasyPR开源车牌识别系统 零.安装OpenCV - 3.2.0 我使用的是Kali系统,基于Debian的一个Linux发行版本. 1.配置系统的软件源(配置正确 ...

  10. UGUI 事件穿透使Scrollrect 滚动

    public class TouchPenetrate : MonoBehaviour, IPointerClickHandler,IBeginDragHandler,IDragHandler,IPo ...