011_第一代软件开发(三)

头图

第一代软件开发(三)

文章目录

  • 第一代软件开发(三)
    • 项目介绍
    • 带下知识点
      • 系统日志
      • 滤波器
        • 陷波滤波器
        • 带通滤波器
      • 打印
        • 初始化
        • 调用打印机打印文件
        • 保存到PDF
    • 总结一下

关键字: QtQml日志打印滤波器

项目介绍

欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。

在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。

在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。

无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!

重要说明☝

☀该专栏更新到第三代软件开发时将转为收费专栏

带下知识点

额,怎么所,一代虽然没有多少东西吧,但是也是有点东西,你说有东西吧,有不知道该分享点啥东西,又想快点到第三代,所以这个篇就是咱们第一代的最后一篇了,能过多少咱算多少,后面再有了再就对比更新。

系统日志

系统日志在一个软件系统中的重要性就不用我说了,例如:

  1. 故障排查和错误诊断:系统日志记录了系统中发生的各种事件、错误和警告信息。当系统出现故障或错误时,系统管理员可以通过检查日志来确定问题的根本原因,从而进行故障排查和错误诊断。

  2. 安全审计和监控:系统日志可以用于安全审计和监控。它记录了用户登录、文件访问、系统配置变更等操作,可用于检测潜在的安全漏洞或不当行为,并进行相应的响应和调查。

  3. 性能分析和优化:系统日志可以提供关于系统性能的有用信息,例如CPU利用率、内存使用量、磁盘IO等。通过分析这些日志,系统管理员可以确定系统的瓶颈,并采取相应的措施进行性能优化。

  4. 合规和法规要求:某些行业和组织需要符合特定的合规和法规要求,例如HIPAA(美国健康保险可移植性和责任法案)或PCI DSS(支付卡行业数据安全标准)。这些要求通常包括对系统日志的记录和保留。

总而言之,系统日志是管理和维护系统不可或缺的工具,它们提供了对系统运行状况、安全性和性能的关键洞察力。通过监视和分析系统日志,可以及时检测和解决问题,并确保系统的稳定性和安全性。

这里简单贴一点代码

static XXX_Log mLog;                                                                     // 日志模块
/*** @brief turingLog* @param type* @param context* @param msg* 劫持Qt日志到日志模块*/
void turingLog(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{mLog.log(type,context,msg);
}
/*** @brief initLog* 初始化日志模块图灵系统部署引导程序*/
void initLog()
{QString mMessage;if(mLog.makeLogDir(mMessage)){if(mLog.openLogDataBase(mMessage)){qInstallMessageHandler(turingLog);                                                      // 部署日志系统}else{QMessageBox::warning(NULL,"警告",mMessage,QMessageBox::Ok);exit(0);}}else{QMessageBox::warning(NULL,"警告",mMessage,QMessageBox::Ok);exit(0);}
}

第三代会有更详细的,这第三代之前,可以看我之前的连接

http://t.csdn.cn/ixV9S

image-20230711225708415

后面基本也是这个思想,劫持Qt 输出信息。

滤波器

数字滤波器是一种用于信号处理的工具,可以对输入信号进行滤波操作,以实现不同的目的。以下是数字滤波器的几个主要作用:

  1. 信号去噪:数字滤波器可以通过滤除输入信号中的噪声成分来减少或消除噪声的影响。这对于提高信号质量、提取有用信息以及增强信号的可靠性非常重要。常见的去噪滤波器包括低通滤波器和带通滤波器。

  2. 信号平滑:数字滤波器可以用于平滑输入信号,即减少信号中的快速变化或突然变化。这对于消除信号中的尖峰、波动或其他不规则变化很有用。平滑滤波器通常使用低通滤波器实现。

  3. 信号分离:数字滤波器可以根据频率特性将输入信号分为不同的频率分量。这对于从混合信号中提取所需频段的信号非常有用。带通滤波器和带阻滤波器是常用的用于信号分离的滤波器类型。

  4. 信号调整:数字滤波器可以调整信号的频率响应或幅度响应,以满足特定的要求。例如,均衡器是一种常见的数字滤波器,可以增强或抑制信号在不同频率上的能量,从而改变信号的音色。

  5. 时域和频域分析:数字滤波器可以通过对信号进行时域和频域分析来提取信号的特征和信息。这样的分析有助于了解信号的频谱内容、频率成分、相位信息等,从而进一步进行信号处理和应用。

总之,数字滤波器在信号处理中具有广泛的应用,可以帮助我们去除噪声、平滑信号、分离频段、调整信号特性,并进行信号分析和处理。它们在音频处理、图像处理、通信系统、控制系统等领域起着重要作用。

这里简单分享两个目前我们已经不在业务中使用了的。

陷波滤波器
/*** @param in* @return* 陷波滤波器*/
double XXXX::filter_nt_2(double in)
{if(mWavesFlag){Nx_2[0] = Nx_2[1];Nx_2[1] = Nx_2[2];Nx_2[2] = in;Ny_2[0] = Ny_2[1];Ny_2[1] = Ny_2[2];// 旧的陷波参数//    Ny_2[2] = 0.99977802282119832 * Nx_2[2]//            - 1.9980144603965628 * Nx_2[1]//            + 0.99977802282119832 * Nx_2[0]//            - (-1.9980144603965628 * Ny_2[1])//            - 0.99955604564239664*Ny_2[0];Ny_2[2] = 0.9990020842609 * Nx_2[2]- 1.996463779717 * Nx_2[1]+ 0.9990020842609 * Nx_2[0]- (-1.996463779717 * Ny_2[1])- 0.9980041685219*Ny_2[0];return Ny_2[2];}elsereturn in;
}
带通滤波器
/*** @brief XXXX::filter_hp_IIR_2* @param in* @return* IIR 带通滤波器*/
double XXXXXX::filter_hp_IIR_2(double in)
{HPx_2[0] = HPx_2[1];HPx_2[1] = HPx_2[2];HPx_2[2] = HPx_2[3];HPx_2[3] = HPx_2[4];HPx_2[4] = HPx_2[5];HPx_2[5] = HPx_2[6];HPx_2[6] = HPx_2[7];HPx_2[7] = HPx_2[8];HPx_2[8] = HPx_2[9];HPx_2[9] = HPx_2[10];HPx_2[10] = in;HPy_2[0] = HPy_2[1];HPy_2[1] = HPy_2[2];HPy_2[2] = HPy_2[3];HPy_2[3] = HPy_2[4];HPy_2[4] = HPy_2[5];HPy_2[5] = HPy_2[6];HPy_2[6] = HPy_2[7];HPy_2[7] = HPy_2[8];HPy_2[8] = HPy_2[9];HPy_2[9] = HPy_2[10];HPy_2[10] = 0.000164111241045   *       HPx_2[10]+ 0                     *       HPx_2[9]+ (-0.000820556205225)  *       HPx_2[8]+ 0                     *       HPx_2[7]+ 0.00164111241045      *       HPx_2[6]+ 0                     *       HPx_2[5]+ (-0.00164111241045)   *       HPx_2[4]+ 0                     *       HPx_2[3]+ 0.000820556205225     *       HPx_2[2]+ 0                     *       HPx_2[1]+ (-0.000164111241045)  *       HPx_2[0]- (-8.703116045885)     *       HPy_2[9]- 34.15268862605        *       HPy_2[8]- (-79.59585877238)     *       HPy_2[7]- 122.0293100455        *       HPy_2[6]- (-128.6120455476)     *       HPy_2[5]- 94.38041529074        *       HPy_2[4]- (-47.62115618819)     *       HPy_2[3]- 15.81171208468        *       HPy_2[2]- (-3.119702490825)     *       HPy_2[1]- 0.2777529978207       *       HPy_2[0];return HPy_2[10];
}

打印

Qt是一个流行的跨平台应用程序开发框架,它提供了丰富的功能和工具来开发图形用户界面(GUI)应用程序。Qt中包含了打印模块,用于实现打印功能并管理打印任务。以下是Qt打印模块的简介:

  1. QPrinter类:QPrinter是Qt打印模块中的核心类之一,它提供了与打印相关的设置和操作接口。通过QPrinter,可以设置打印机名称、页面大小、方向、页边距等打印参数,并控制打印任务的执行。

  2. QPainter类:QPainter是Qt绘图系统中的类,也用于打印模块中的绘制操作。通过QPainter,可以将绘制的内容直接渲染到打印设备上,例如绘制文本、图像、形状等。

  3. QPrintDialog类:QPrintDialog是一个对话框类,用于显示打印机选择和打印参数设置的对话框。通过QPrintDialog,用户可以选择打印机、设置打印参数,并启动打印任务。

  4. QPageSetupDialog类:QPageSetupDialog是另一个对话框类,用于显示页面设置相关的对话框。用户可以在该对话框中设置页面大小、方向、页边距等参数。

  5. 打印支持:Qt打印模块提供了对各种打印格式的支持,包括常见的文档格式(如PDF、PostScript)以及图像格式(如PNG、JPEG)。通过Qt的打印模块,可以将应用程序中的内容以不同的格式输出到打印设备上。

  6. 打印预览:Qt还提供了打印预览功能,允许用户在打印之前查看打印任务的效果。通过QPrintPreviewDialog类,可以显示包含打印内容的预览窗口,并进行缩放、导航和打印操作。

总而言之,Qt打印模块提供了丰富的类和函数,用于实现打印功能和管理打印任务。它简化了打印相关的开发工作,使开发人员能够轻松地将打印功能集成到他们的Qt应用程序中。无论是简单的文档打印还是复杂的打印设置,Qt打印模块都提供了灵活且易于使用的接口。

首先在Pro文件中添加

QT += printsupport 

剩下就是按照步骤来就可以了

初始化
/*** @brief XXX::initKernel* 打印模块初始化*/
void XXXXX::initKernel()
{mPrinter = new MPrinter();connect(mPrinter,&MPrinter::signalQPrinterNewFinished,this,[=](){if(mPrintPreviewWidget){QLayoutItem *item = nullptr;while((item = ui->verticalLayout->takeAt(0)) != nullptr)                        // 清空layout元素{delete item;}delete mPrintPreviewWidget;mPrintPreviewWidget = nullptr;                                                  // 需要删除后,再创建,才能刷新,触发repaint}if(!mPrintPreviewWidget){mPrintPreviewWidget = new QPrintPreviewWidget(mPrinter->mPdfPrinter,ui->widget);mPrintPreviewWidget->setStyleSheet("QGraphicsView {qproperty-backgroundBrush: #0e4c5b;border:0px}");mPrintPreviewWidget->setAttribute(Qt::WA_TranslucentBackground);mPrintPreviewWidget->setViewMode(QPrintPreviewWidget::SinglePageView);mPrintPreviewWidget->setZoomMode(QPrintPreviewWidget::FitInView);               // FitInView:根据视野大小,自动缩放,会完整显示一页;FitToWidth:根据宽度缩放,会无法完整显示一页ui->verticalLayout->addWidget(mPrintPreviewWidget);}connect(mPrintPreviewWidget, SIGNAL(paintRequested(QPrinter*)), this, SLOT(slot_previewPdfOnWidget(QPrinter*)));mPrintPreviewWidget->repaint();});mPrinter->start();}
调用打印机打印文件
/*** @brief XXX::printPorter* 打印报告*/
void XXX::printReport()
{mPrinter->mPdfPrinter->setOutputFormat(QPrinter::PdfFormat);mPrinter->mPdfPrinter->setOutputFileName(0);mPrintPreviewWidget->print();mPrinter->mPdfPrinter->setOutputFileName(QString("./T_Report/%1.pdf").arg(this->patientName + QDateTime::currentDateTime().toString("_MMddhhmmss")));mPrintPreviewWidget->print();
}
保存到PDF
/*** @brief XXX::saveReport* 保存PDF*/
void XXXX::saveReport()
{mPrinter->mPdfPrinter->setOutputFormat(QPrinter::PdfFormat);Turing_Deploy::makeDir(G_DataPath + "/T_Report");QString url = Turing_Deploy::makeReportDir();mPrinter->mPdfPrinter->setOutputFileName(QString(url + "/%1.pdf").arg(this->patientName + QDateTime::currentDateTime().toString("_MMddhhmmss")));mPrintPreviewWidget->print();
}

总结一下

在这里,我们的第一代硬件及软件的任务就完成了,是好是坏,都是过去式了,后面我们第二代又要重新开始硬件选型和软件开发了,我继续分享,也期待你继续看下去。


博客签名2021

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/141064.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

rom修改----安卓系列机型如何内置app 如何选择so文件内置

系统内置app的需求 在与各工作室对接中操作单中,很多需要内置客户特定的有些app到系统里,这样方便客户刷入固件后直接调用。例如内置apk 去开机引导 去usb调试 默认开启usb安全设置等等。那么很多app内置有不同的反应。有的可以直接内置。有的需要加so…

【三、centOS安装后的基本配置】

Centos的ip地址设定,cmd查看 Windows: ipconfig 再到windows电脑的网络共享中心查看 设置虚拟机的IPv4,锁定本地电脑的ip地址和网关 再重启虚拟机机器,vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE"Ethernet" PROXY_MET…

JavaScript学习笔记05

JavaScript笔记05 操作 BOM 对象(重点) 什么是 BOM BOM(Browser Object Model)是指浏览器对象模型,是用于描述这种对象与对象之间层次关系的模型。浏览器对象模型(BOM)提供了独立于内容的、可…

设计模式再探——原型模式

目录 一、背景介绍二、思路&方案三、过程1.原型模式简介2.原型模式的类图3.原型模式代码4.原型模式深度剖析5.原型模式与spring 四、总结五、升华 一、背景介绍 最近在做业务实现的时候,为了通过提升机器来降低开发人员的难度和要求,于是在架构设计…

用Redis做数据排名

1.背景 用Redis做数据缓存用的比较多,大家都能熟练使用String和Hash结构去存储数据,今天讲下如何使用ZSet来做数据排名。 假设场景是需要按天存储全国城市的得分数据,可以查询前十名的城市排名。 这个case可以使用传统关系型数据库做…

【lesson7】git的介绍及使用

文章目录 什么是gitgit的历史git使用在gitee上创建仓库git clone HTTPS地址git add .git add 文件名git commit “日志”git pushgit loggit rm 文件名git statusgit pull 什么是git git是版本控制器,那么什么是版本控制器呢? 下面讲个故事为大家讲解一…

AI AIgents时代 - (三.) AutoGPT和AgentGPT

前两篇讲解了Agent的原理和组件,这节我将给大家介绍两个agent项目,给出它们的工作原理和区别,并教大家亲手尝试使用 Agents🎉 🟢 AutoGPT🤖️ 我们的老朋友,之前文章也专门写过。AutoGPT 是一…

iphone的safari浏览器实现全屏的pwa模式,并修改顶部状态栏背景颜色

要想修改顶部背景颜色&#xff0c;需要用到这个属性&#xff1a;content就是你要设置的颜色 <!-- 状态栏的背景色 --><meta name"theme-color" content"#f8f8f8" /> 然后再加上下面的设置&#xff1a; <!-- 网站开启对 web app 程序的支持…

【数据结构】C++实现哈希表

闭散列哈希表 哈希表的结构 在闭散列的哈希表中&#xff0c;哈希表每个位置除了存储所给数据之外&#xff0c;还应该存储该位置当前的状态&#xff0c;哈希表中每个位置的可能状态如下&#xff1a; EMPTY&#xff08;无数据的空位置&#xff09;。EXIST&#xff08;已存储数…

Qt创建线程(线程池)

1.线程池可以创建线程统一的管理线程&#xff08;统一创建、释放线程&#xff09; 2.使用线程池方法实现点击开始按钮生成10000个随机数&#xff0c;然后分别使用冒泡排序和快速排序排序这10000个随机数&#xff0c;最后在窗口显示排序后的数字&#xff1a; mainwindow.h文件…

FPGA的DQPSK调制解调Verilog

名称&#xff1a;DQPSK调制解调 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a; 使用Verilog语言进行DQPSK调制和解调&#xff0c;并进行仿真 代码下载&#xff1a;DQPSK调制解调verilog&#xff0c;quartus_Verilog/VHDL资源下载 代码网&#xff1a;h…

Vector Art - 矢量艺术

什么是矢量艺术&#xff1f; 矢量图形允许创意人员构建高质量的艺术作品&#xff0c;具有干净的线条和形状&#xff0c;可以缩放到任何大小。探索这种文件格式如何为各种规模的项目提供创造性的机会。 什么是矢量艺术作品? 矢量艺术是由矢量图形组成的艺术。这些图形是基于…

【音视频】ffplay源码解析-PacketQueue队列

包队列架构位置 对应结构体源码 MyAVPacketList typedef struct MyAVPacketList {AVPacket pkt; //解封装后的数据struct MyAVPacketList *next; //下一个节点int serial; //播放序列 } MyAVPacketList;PacketQueue typedef struct PacketQueue {MyAVPacketList …

快递发货小程序商城的效果是什么

商家搭建小程序商城后&#xff0c;客户交易可以通过到店自提、同城配送、快递发货的方式满足不同场景不同客户购物。 本地客户难以拓展&#xff0c;三公里范围内流量有限&#xff0c;外地无疑是商家拓展市场、客户的绝佳选择&#xff0c;传统电话、微信联系难以信任及选择&…

问题:conda删除虚拟环境,报错no package names supplied

用conda 用 conda remove -n ScratchDet_20200114 删除虚拟 环境ScratchDet_20200114时报错 conda remove -n ScratchDet_20200114CondaValueError: no package names supplied,try "conda remove -h" for more details 解决方法&#xff0c;用下面的命令 conda env…

FPGA的BPSK调制verilog

名称&#xff1a;BPSK调制verilog 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a; 一、设计说明 BPSK调制广泛应用于卫星通信、移动通信等领域。本题目要求设计一个基于直接数字频率合成技术的BPSK调制器&#xff0c;实现对输入周期数字比特流的BPSK调…

LeetCode 周赛上分之旅 #47 前后缀分解结合单调栈的贡献问题

⭐️ 本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架&#xff0c;你的思考越抽象&#xff0c;它能覆盖的问题域就越广&#xff0c;理解难度…

【深度学习实验】前馈神经网络(一):使用PyTorch构建神经网络的基本步骤

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入库 1. 定义x,w,b 2. 计算净活性值z 3. 实例化线性层并进行前向传播 4. 打印结果 5. 代码整合 一、实验介绍 本实验使用了PyTorch库来构建和操作神经网络模型&#xff0c;主要是关…

ExcelServer EXCEL服务器使用- 用户、角色权限配置

Excel文件服务器搭建 搭建Excel服务器 1、登录 默认 用户名 Admin 密码 3 2、角色管理 添加修改角色 角色配置在 系统管理->角色.fexm文件夹下 可以像修改excel文件一样 修改角色 3、用户管理 添加修改用户 用户的修改在 系统管理->用户.fexm 可以像excel一样编辑用户…

人工智能轨道交通行业周刊-第61期(2023.9.18-9.24)

本期关键词&#xff1a;焊线机器人、智能综合运维管理系统、信号平面图、铁路部门架构、书生浦语大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通…