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);

主进程中写好信号与槽,并注册就可以运行了

最终效果:


__EOF__

本文作者王志强
本文链接https://www.cnblogs.com/nanzihan/p/18601815.html
关于博主:王云瓶
版权声明:转载请注明来源
声援博主:道法自然 !!!
posted @   王云瓶  阅读(26)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示