010_第一代软件开发(二)

news2024/10/7 19:22:48
头图

第一代软件开发(二)

文章目录

  • 第一代软件开发(二)
    • 项目介绍
    • 界面布局
    • 功能完善
      • 快照功能
      • 获取可用串口
      • 播放按键提示音

关键字: QtQmlQSerialPortQPixmapQSoundEffect

项目介绍

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

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

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

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

重要说明☝

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

界面布局

image-20230707222542339

如上图所示,整个软件布局基本就是汉堡结构,上中下,左中右结构,有了这些,就构成了这个软件的基本操作逻辑了,这个也是咱充前辈那里面借鉴学习来的。最上面就是主菜单按钮,软件系统名称,主要功能选择Tab,编辑病历按钮。设备状态按钮和帮助按钮。中间从左到右为主菜单按钮,快捷功能栏,快捷功能菜单,中心曲线显示区域,两个控制模块,一个光学模块和一个预留模块以及病人编辑模块。最下方及时基本的状态栏,从左到右基本为软件版本,U盘插入图标和系统时间。

那么剩下的工作就是完善这些功能以及子模块了。

功能完善

因为第一代已经是好久的事情了,所以咱们这里基本就是把基本的框架聊聊,直接带带功能点咱就过了哈。重点还是研究咱第三代的东西。

快照功能

为什么不叫截图呢,因为在我理解看来,截图是可以鼠标截取任意位置的像素保存成图片的,而目前我们的功能就只把指定区域的像素保存成图片再往细了说就是把某个控件保存成图片。直接上代码

void MainWindow::snapshot()
{
    //    mMonitor_kernel_1->setMode(1);
    //    mMonitor_kernel_2->setMode(1);
    mPix = new QPixmap(ui->widget_monitor->grab(QRect(0,0,ui->widget_monitor->width(),ui->widget_monitor->height())));                                  // 获取谁的RGB
    QString filePathName = "./temp/";
    /**
     *
     * 这里需要增加参数字段
     */
    filePathName += QDateTime::currentDateTime().toString("hhmmsszzz");
    filePathName += ".png";
    if(!mPix->save(filePathName,"png"))
    {
        qDebug()<<"病历快照保存失败";
    }
    mReport_Kernel->inseartPic(filePathName);
    //    mMonitor_kernel_1->setMode(0);
    //    mMonitor_kernel_2->setMode(0);
}

获取可用串口

因为串口咱用的就是Qt 提供的QSerialPort类,那些基本设置咱就不说了,百度一大堆了,咱说下我们业务中的一个需求,获取可用的串口,并进行自动连接。

代码如下

void XXXXX::getAvailableSerialPort(QStringList &comlist)
{
    /**
     * 01 先清空设备列表
     */
    comlist.clear();
    /**
     * 02 遍历设备数,查找符号条件的串口
     * 这里感觉比较耗时,取决于当前设备上串口数量
     */
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        QSerialPort serial;
        serial.setPort(info);
        if((QString::compare(info.description(),&COM_Description,Qt::CaseSensitive) == 0))
        {
            if(serial.open(QIODevice::ReadWrite))
            {
                comlist.append(info.portName());
                serial.close();
            }
        }
    }
    /**
     * 03 根据串列表中的数量,进行不同的处理
     * 如果有且仅有一个设备,则直接进行连接
     * 如果有多个,这需要通过协议握手,来确定设备
     */
    if(!comlist.isEmpty())
    {
        if(comlist.count() == 1)
        {
            if(flag_AutoConnectSerialPort)
                openSerialPort(comlist.at(0));
        }
        else
        {
            /**
             * 这里应该是当设备列表里面有多个 CH340 串口设备时,通过一个握手函数,连确定那个设备时真整的设备
             * 暂时应该还遇不到,不做处理,当遇到多个设备,默认连接第一个
             */
            openSerialPort(comlist.at(0));
            qDebug() << "两个以上同名设备,默认就链接第一个接口" << LOGINFOR;
        }
        qDebug() << "手柄链接成功"<< LOGINFOR;
        if(mAutoConnectTimer)
            if(mAutoConnectTimer->isActive())
                mAutoConnectTimer->stop();
    }
    else
    {
        emit signal_Serial_NoAvailableDevicesFound();
        if(mAutoConnectTimer)
            if(!mAutoConnectTimer->isActive())
                mAutoConnectTimer->start(30);
    }
}

播放按键提示音

正式项目中,咱学聪明了哈,不在用QMediaPlayer来播放提示音了,而是用了QSoundEffect,用法和QMediaPlayer没啥差别,代码如下

void XXXX::slot_InitAudioThread()
{
    soundEffect = new QSoundEffect;
    soundEffect->setSource(QUrl("qrc:/T_Audio/systemStart.wav"));
    soundEffect->setLoopCount(1);
    soundEffect->play();

    soundEffectButton = new QSoundEffect;
    soundEffectButton->setSource(QUrl("qrc:/T_Audio/buttonTach.wav"));                                  // 这里使用QSoundEffect的时候,对wav的码率有要求,测试192是没有问题
    soundEffectButton->setLoopCount(1);

    soundEffectBee = new QSoundEffect;
    soundEffectBee->setSource(QUrl("qrc:/T_Audio/bee.wav"));
    soundEffectBee->setLoopCount(1);
}

博客签名2021

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

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

相关文章

论文《Enhancing Hypergraph Neural Networks with Intent Disentanglement for SBR》阅读

论文《Enhancing Hypergraph Neural Networks with Intent Disentanglement for Session-based Recommendation》阅读 IntroductionPreliminaries问题形式化Hypergraph Methodology嵌入层 &#xff08;Intent-Aware Embedding&#xff09;会话超图构建 微观解耦宏观解耦预测层模…

SpringMVC+入门案例

一、入门案例 1.依赖导入 <!--1. 导入SpringMVC与servlet的坐标--> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scop…

postgresql-数据库与模式

postgresql-数据库 基本概念创建数据库修改数据库删除数据库管理模式 基本概念 数据库管理系统&#xff08;DBMS&#xff09;是用于管理数据库的软件系统。常见的关系型DBMS有PostgreSQL、 MySQL、Oracle、Microsoft SQL Server、SQLite 等。常见的 NoSQL 数据库有 Redis、Mon…

vue3-ts-vite:Google 多语言调试 / 翻译

一、实现目标 二、代码实现 2.1、项目vue3 - ts - vite 2.2、index.html 引入文件 <script>window.onload function () {const script document.createElement(SCRIPT)script.src https://translate.google.com/translate_a/element.js?cbgoogleTranslateElementI…

kr 第三阶段(六)C++ 逆向

结构体 结构体对齐 设置结构体对齐值 方法1&#xff1a;在 Visual Studio 中可以在 项目属性 -> 配置属性 -> C/C -> 所有选项 -> 结构体成员对齐 中设置结构体对齐大小。方法2&#xff1a;使用 #pragma pack(对齐值) 来设置&#xff0c;不过要想单独设置一个结…

2023 “华为杯” 中国研究生数学建模竞赛(D题)深度剖析|数学建模完整代码+建模过程全解全析

问题一&#xff1a;区域碳排放量以及经济、人口、能源消费量的现状分析 思路&#xff1a; 定义碳排放量 Prediction 模型: CO2 P * (GDP/P) * (E/GDP) * (CO2/E) 其中: CO2:碳排放量 P:人口数量 GDP/P:人均GDP E/GDP:单位GDP能耗 CO2/E:单位能耗碳排放量 2.收集并统计相关…

vuereact质检工具(eslint)安装使用总结

1、ESLint ESLint工具主要类似java中的checkStyle和findbugs&#xff0c;是检查代码样式和逻辑规范的工具。 1.1、ESLint安装流程 打开VSCode软件&#xff0c;打开扩展中心&#xff0c;下载ESLint插件 图1.1 点击后面的install按进行安装&#xff0c;如图1.2所示&#xff1…

MySQL(8) 优化、MySQL8、常用命令

一、MySQL优化 从上图可以看出SQL及索引的优化效果是最好的&#xff0c;而且成本最低&#xff0c;所以工作中我们要在这块花更多时间。 服务端参数配置&#xff1b; max_connections3000 连接的创建和销毁都需要系统资源&#xff0c;比如内存、文件句柄&#xff0c;业务说的支持…

代码随想录算法训练营第四十二天| 01背包问题,你该了解这些! 01背包问题,你该了解这些! 滚动数组 416. 分割等和子集

正式开始背包问题&#xff0c;背包问题还是挺难的&#xff0c;虽然大家可能看了很多背包问题模板代码&#xff0c;感觉挺简单&#xff0c;但基本理解的都不够深入。 如果是直接从来没听过背包问题&#xff0c;可以先看文字讲解慢慢了解 这是干什么的。 如果做过背包类问题&…

网络安全深入学习第七课——热门框架漏洞(RCE— Fastjson反序列化漏洞)

文章目录 一、什么是json?二、Fastjson介绍三、Fastjson-历史漏洞四、Fastjson特征1、在请求包里面有json格式的2、报错信息中会显示fastjson字眼 五、Fastjson序列化和反序列化六、Fastjson反序列化漏洞原理七、Fastjson反序列化漏洞过程八、Fastjson反序列化漏洞&#xff08…

农林种植类VR虚拟仿真实验教学整体解决方案

传统的葡萄嫁接需要在固定月份&#xff0c;实操成本高&#xff0c;管理周期长&#xff0c;葡萄嫁接VR虚拟仿真实训是VR虚拟仿真公司深圳华锐视点通过在虚拟环境中模拟葡萄嫁接过程&#xff0c;融入教学和实训考核多种模式&#xff0c;打造了全新的职业技能培训方式。 葡萄嫁接V…

【Java实战项目】【超详细过程】—— 大饼的图片服务器6

目录 前言一、引入MD51.引入md5计算依赖2.按照md5值查找图片属性3.存储图片4.删除图片 二、防盗链三、分类查看图片1.思路&#xff1a;2.数据库3.Image4.from表单5.ImageDao类中原有方法6.按照类型sort在数据库中查找图片属性7.ImageServlet 类8.ImageSortServlet类9.WEB.xml绑…

DevExpress WinForms图表组件 - 直观的数据信息呈现新方式!(一)

凭借界面控件DevExpress WinForms全面的2D和3D图表类型的集合&#xff0c;DevExpress WinForms的图表控件设计大大简化了开发者直观地向最终用户呈现信息的方式。 DevExpress WinForms有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。同时能完…

[python 刷题] 739 Daily Temperatures

[python 刷题] 739 Daily Temperatures 题目&#xff1a; Given an array of integers temperatures represents the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the ith day to get a warmer temperatur…

记一次实战案例

1、目标&#xff1a;inurl:news.php?id URL&#xff1a;https://www.lghk.com/news.php?id5 网站标题&#xff1a;趋时珠宝首饰有限公司 手工基础判断&#xff1a; And用法 and 11: 这个条件始终是为真的, 也就是说, 存在SQL注入的话, 这个and 11的返回结果必定是和正常页…

修改vscode底部栏背景和字体颜色

修改vscode底部栏背景和字体颜色 如图&#xff1a; 首先打开齿轮&#xff0c;打开设置搜索workbench.colorCustomizations,然后点击编辑setting.json修改setting.json内内容 "workbench.colorCustomizations": {"statusBar.foreground": "#FFFFFF…

为什么u盘在mac上显示不出来

插入U盘是个看似简单的操作&#xff0c;但有时候在Mac电脑上却出现了无法显示U盘的情况。这样的问题是非常让人头疼的&#xff0c;特别是当你急需使用U盘中的文件时。那么&#xff0c;究竟为什么U盘在Mac上会显示不出来呢&#xff1f;今天就让我们一起来深入了解一下这个问题&a…

OR54 字符串中找出连续最长的数字串

目录 一、题目 二、解答 &#xff08;一&#xff09;问题一&#xff1a;在记录完一组连续字符串后&#xff0c;没有注意判别紧随其后的非数字字符 &#xff08;二&#xff09;问题二&#xff1a;越界访问 &#xff08;三&#xff09;正确 一、题目 字符串中找出连续最长的…

powerDesigner 的基本使用

打开powerDesigner 新建 PDM(物理数据模型) 添加表字段 双击表&#xff0c;设置ID自增 选择导出数据库表SQL 导出成功 使用三方工具连接数据库&#xff0c;然后运行对应SQL文件即可 导入SQL文件数据到powerDesigner

Ae 效果:CC Tiler

扭曲/CC Tiler Distort/CC Tiler CC Tiler &#xff08;CC 平铺器&#xff09;主要用于将图像以平铺的方式重复显示&#xff0c;可以创建有趣的复制和平铺的视觉效果。 平铺的范围限制在图层大小。如果想在合成大小内进行平铺&#xff0c;最简单的方法是先将源图像&#xff08;…