首页 > 其他分享 >qt激光加工软件开发——日志模块

qt激光加工软件开发——日志模块

时间:2024-12-12 17:21:36浏览次数:4  
标签:qt 软件开发 break handler QString arg msg logMessage 日志

本篇主要介绍该加工软件的日志模块
实现的功能:

  • 主界面日志栏显示

  • 分级显示

  • 本地保存

  • 简单的调用机制
    目前选择的是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,软件开发,break,handler,QString,arg,msg,logMessage,日志
From: https://www.cnblogs.com/nanzihan/p/18601815

相关文章

  • Qt之点击鼠标右键创建菜单栏使用(六)
    Qt开发 系列文章-menu(六)目录前言一、示例演示二、菜单栏1.MenuBar2.Menu总结前言QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menubar)、多个工具栏(toolbars)、一个状态栏(statusbar)及一个中心部件(centralwidget),是许多应用程序的基础。今天本文......
  • Qt,设置软件字体
      //一、设置全局字体(系统库字体)QFontfont("Courier",10,QFont::Normal,false);a.setFont(font);//二、设置全局字体(自定义字体)intfont_id=QFontDatabase::addApplicationFont(QStringLiteral(":/static/font/FormaDJRMicro-Regular.ttf"));QStringfont_name......
  • “物品复活”软件开发心得总结
    “物品复活”软件开发体会  本次软件系统的开发过程中,我学习并尝试运用软件工程中的各种设计原则,用python语言构建了一个物品“复活”软件,在初版的基础上增添了更多功能,从重新的分析到设计再到搭建,让我对软件开发的整个生命周期有了更加全面的理解。  在软件工程中,需求分......
  • kali下qt无法使用中文输入法解决方案
    1.如果使用的apt安装的designer-qt6等的一些工具,则使用如下方案aptinstallfcitx5-frontend-qt6如上就可解决,如果用的qt5,就安装fcitx5-frontend-qt5 2.使用qt在线安装的dpkg-Lfcitx5-frontend-qt6查看安装路径找到libfcitx5platforminputcontextplugin.so这个文件......
  • [Java]日志技术
    把程序运行的信息,记录到文件中,方便程序员定位问题优势:以开关的形式控制日志的启停,无需侵入代码修改日志接口:是设计日志框架的一套规范,日志框架需要实现日志接口,日志接口的存在降低了切换不同日志框架的学习成本CommonsLogging(JCL)接口->较老的日志接......
  • Qt编写RK3588视频播放器/支持RKMPP硬解/支持各种视音频文件和视频流/海康大华视频监控
    一、前言用ffmpeg做硬解码开发,参考自带的示例hw_decode.c即可,里面提供了通用的dxva2/d3d11va/vaapi这种系统层面封装的硬解码,也就是无需区分用的何种显卡,操作系统自动调度,基本上满足了各种场景的需要,这种方式很通用也便捷,但是一些特殊场景必须要用指定硬解码器名称的方式,比如指定......
  • QT自定义控件实践--滑动组件
    概述             本篇文章,会逐步带您了解,如何自定义一个QT的滑动组件操作步骤选择合适的基类继承:我们命名这个自定义控件为MySlipButton,继承自QWidget添加成员变量:根据滑动组件的特性,添加合适的成员变量,如当前值、最小值、最大值、滑块的位置等。......
  • 【Java开发】SLF4J 门面日志框架原理分析
    SLF4J的门面设计模式SLF4J(SimpleLoggingFacadeforJava)是一套日志接口,它提供了一种一致的API来使用不同的日志框架,如java.util.logging(JUL)、Logback、Log4j、Log4j2等。SLF4J的设计基于门面(Facade)设计模式,这种设计模式为子系统中的一组接口提供一个统一的高层接口,使得子系统......
  • 【Elasticsearch01】企业级日志分析系统ELK之Elasticsearch单机部署
    Elasticsearch单机部署Elasticsearch安装说明官方文档https://www.elastic.co/guide/en/elastic-stack/index.htmlhttps://www.elastic.co/guide/en/elasticsearch/reference/master/install-elasticsearch.html部署方式包安装二进制安装Docker部署Ansible批量部......
  • Qt/C++音视频开发 - 获取本地摄像头名称/FFmpeg命令日志方式
    Qt/C++音视频开发-获取本地摄像头名称/FFmpeg命令日志方式介绍在音视频开发中,获取本地摄像头名称和通过FFmpeg命令记录日志是两个常见的需求。Qt/C++结合使用FFmpeg库实现这些功能,可以提高开发效率并增加程序的灵活性。应用使用场景实时流媒体应用:在直播、视频会议等......