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

实现的功能:

  • 主界面日志栏显示

  • 分级显示

  • 本地保存

  • 简单的调用机制

    目前选择的是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. VirtualBox磁盘扩容

    前言 虚拟机开始时设置的磁盘空间比较小,后面使用就不够了. # 查询磁盘使用情况 df -h 虚拟硬盘扩容 关闭正在运行的虚拟机 选中工具栏 选择虚拟硬盘,并选中需要扩容的磁盘 拖动进度条,设置想要扩 ...

  2. Error: EACCES: permission denied

    前言 在安装 vue 脚手架的时候,报错 Error: EACCES: permission denied # 安装 Vue CLI 3.x npm i -g @vue/cli 解决 执行以下命令就可 ...

  3. Joker 智能开发平台再放大招,新作将彻底重塑开发模式

    -- 突破传统枷锁,引领开发模式全面革新 自前端可视化智能平台重磅发布后,其在行业内的影响力便如涟漪般迅速扩散.凭借着创新的设计理念和过硬的性能表现,这个平台为无数开发者和企业提供了高效且便捷的开发解 ...

  4. 带有可旋转摄像头的移动小车(urdf+rviz)

    博客地址:https://www.cnblogs.com/zylyehuo/ 成果图 step1:新建工作空间 mkdir -p catkin_ws/src cd catkin_ws catkin_m ...

  5. 什么是HTTP压缩及HTTP压缩的过程

    HTTP压缩是指: Web服务器和浏览器之间压缩传输的"文本内容"的方法. HTTP采用通用的压缩算法,比如gzip来压缩HTML,Javascript, CSS文件. 能大大减少 ...

  6. ORA-01779: cannot modify a column which maps to a non-key-preserved table

    Oracle中试图对一个子查询进行更新时可能会出现ORA-01779错误.该错误的内容为: ORA-01779: cannot modify a column which maps to a non- ...

  7. 记载火狐浏览器下的一次新手级的js解密工作

    警告:该随笔内容仅用于合法范围下的学习,不得用于任何商业和非法用途,不得未经授权转载,否则后果自负. 首先是需要解密的网站:https://www.aqistudy.cn/historydata/mo ...

  8. udl(Universal Data Link)通用数据连接文件

    新建文本文档 更改后缀名为.udl(注意小点) 然后打开运行 配置并测试 改回后缀名.txt(有个小点哦) 打开就是了

  9. Spring 整合 Junit

    一.导入jar包 二.使用@RunWith 注解替换原有运行器 [main()] /** * * @Company http://www.ithiema.com * @Version 1.0 */ @ ...

  10. 还有的时候,会遇到DataGrid里面嵌套DataGrid(重叠嵌套),然后里面的鼠标滚轮无法响应外面的滚动,为此记录下解决方案

    与上一篇区别在于,详情里面的模板通常是通用的,被定义在样式文件中,被重复使用,因此无法为其添加后台代码,如果能添加后台代码,请翻阅第一篇:所以需要用到命令的方式来辅助事件的抛出,当然还可以利用第三方库 ...