010_第一代软件开发(二)
第一代软件开发(二)
文章目录
- 第一代软件开发(二)
- 项目介绍
- 界面布局
- 功能完善
- 快照功能
- 获取可用串口
- 播放按键提示音
关键字:
Qt、
Qml、
QSerialPort、
QPixmap、
QSoundEffect
项目介绍
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。
在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。
在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。
无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!
重要说明☝
☀该专栏更新到第三代软件开发时将转为收费专栏
界面布局

如上图所示,整个软件布局基本就是汉堡结构,上中下,左中右结构,有了这些,就构成了这个软件的基本操作逻辑了,这个也是咱充前辈那里面借鉴学习来的。最上面就是主菜单按钮,软件系统名称,主要功能选择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()))); // 获取谁的RGBQString 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);
}

相关文章:
010_第一代软件开发(二)
第一代软件开发(二) 文章目录 第一代软件开发(二)项目介绍界面布局功能完善快照功能获取可用串口播放按键提示音 关键字: Qt、 Qml、 QSerialPort、 QPixmap、 QSoundEffect 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QMLÿ…...
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(四)
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 上一节说到待办系统的监听器TaskCreateListener,需要在flowable全局监听配置里加入配置 1、Glo…...
RestTemplate:简化HTTP请求的强大工具
文章目录 什么是RestTemplateRestTemplate的作用代码示例 RestTemplate与HttpClient 什么是RestTemplate RestTemplate是一个在Java应用程序中发送RESTful HTTP请求的强大工具。本文将介绍RestTemplate的定义、作用以及与HttpClient的对比,以帮助读者更好地理解和使…...
【数据结构】什么是数据结构?
数据结构(Data Structure)是计算机存储,组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合. 这么讲可能有些抽象,放一张图大家可能好理解一点: 上图依次是数据结构中逻辑结构中的:集合结构,线性结构,树形结构,图形结构. 而: 数据结构是一门研究非数值计算的程…...
c++源码编译过程(翻译阶段)的若干细节概要
c程序的编译主要包含两个阶段:源码编译(翻译阶段)和目标文件链接。 源码编译过程主要有如下这些阶段: 阶段1: 翻译源码文本字符 阶段2: 逻辑源码行标准化处理 阶段3: 文法处理,分解为不同的源码文本类型序列。例如分解为注释、预处理指…...
Go内置函数make和new的区别?
首先纠正一下make 和 new 是内置函数,不是关键字。 变量初始化,一般分为2步,变量声明变量内存分配,var 关键字就是用来声明变量的,new和make 函数主要是用来分配内存的。 var 声明值类型的变量时,系统会默…...
动手学深度学习(pytorch版)第二章-2.3线性代数Note-linear-algebra
类型 标量:仅包含一个数值被称为标量 向量:向量可以被视为标量值组成的列表 矩阵:正如向量将标量从零阶推广到一阶,矩阵将向量从一阶推广到二阶。 A torch.arange(20).reshape(5, 4) A.T //转置 张量:是描述具有…...
Docker CMD指令如何覆写
在Dockerfile里,CMD指令是可以被覆盖的。 在构建镜像时,可以通过docker build命令的–cmd选项覆盖Dockerfile的CMD: 例如: FROM ubuntu CMD ["echo","hello"]构建时覆盖CMD: docker build -t test --cmd "echo world" .在创建容器时,可以通过…...
动手吧,vue单独使用的复选框
单独使用的复选框可以用在两个状态之间的切换,如是否阅读协议、记住账号等场景。 效果: 1、template部分 <template><label class"v-checkbox-single"><span class"v-checkbox_input" :class"{ disabled }&qu…...
升级iOS17后可以降级吗?iOS17退回iOS16方法教程分享
iOS 17已上线几天,从网上用户的反馈和媒体机构的报告来看,iOS17系统对旧机型来说并不友好,除了电池续航下降以外,占用大量储存空间,BUG也不少。 苹果于 9 月 7 日发布了 iOS 16.6.1 版本,如果升级iOS17后发…...
基于STM32和LORA组网的养老院智能控制系统设计(第十八届研电赛)
一、整体功能 数据采集从机1采集烟雾浓度,PM2.5浓度,甲醛浓度;从机2采集温湿度,光照强度,噪声强度,老人体感温度;从机3收集厨房饮用水的TDS值。3个数据采集从机将采集到的数据显示在本地OLED屏…...
关于Qt适配不同分辨率和缩放率时可能遇到的问题和解决方案
如果没有特殊的处理,Qt的UI窗口在不同的分辨率和缩放率下,其显示效果可能会出现问题,常见的有: 子控件堆叠,无法显示完整 窗口尺寸变大,超出屏幕的显示范围 控件变形,长宽比不合理 界面模糊 …...
第1篇 目标检测概述 —(1)目标检测基础知识
前言:Hello大家好,我是小哥谈。目标检测是计算机视觉领域中的一项任务,旨在自动识别和定位图像或视频中的特定目标,目标可以是人、车辆、动物、物体等。目标检测的目标是从输入图像中确定目标的位置,并使用边界框将其标…...
Discuz论坛网站标题栏Powered by Discuz!版权信息如何去除或是修改?
当我们搭建好DZ论坛网站后,为了美化网站,想把标题栏的Powered by Discuz!去除或是修改,应该如何操作呢?今天飞飞和你分享,在操作前务必把网站源码和数据库都备份到本地或是网盘。 Discuz的版权信息存在两处…...
springboot整合aop,实现日志操作
前言: 整合之前,我们要明白aop是什么,为什么要用aop,aop能帮我们做什么。 答:AOP是面向切面编程(Aspect-Oriented Programming)的简称,它是一种编程思想,旨在在面向对象…...
openjdk和oracle jdk的区别
OpenJDK 和 Oracle JDK 都是 Java Development Kit (JDK) 的不同实现,用于开发和运行 Java 应用程序。它们有一些区别,但也有很多相似之处。以下是它们之间的主要区别: 开源性质: OpenJDK 是开源的,由一个社区维护和开…...
深度学习-Python调用ONNX模型
目录 ONNX模型使用流程 获取ONNX模型方法 使用ONNX模型 手动编写ONNX模型 Python调用ONNX模型 常见错误 错误raise ValueError...: 错误:Load model model.onnx failed 错误:CUDAExecutionProvider is not in available provider 错…...
[2023.09.24]: 今天差点又交白卷
今天周日,搞定了家里装修的一件事情,周末的事特别多,总算在10点的时候,解决了昨天那个输入焦点设置失败的问题。 在探索Rust编写基于web_sys的WebAssembly编辑器:挑战输入光标定位的实践中,我们总结了设置光…...
css,环形
思路: 1.先利用conic-gradient属性画一个圆,然后再叠加 效果图 <template><div class"ring"><div class"content"><slot></slot></div></div> </template> <script> import …...
php食堂点餐系统hsg5815ABA2程序-计算机毕业设计源码+数据库+lw文档+系统+部署
php食堂点餐系统hsg5815ABA2程序-(毕业设计毕设项目源代码课程设计程序设计指导xz2023) php食堂点餐系统hsg5815ABA2程序-计算机毕业设计源码数据库lw文档系统部署...
工作流自动化革命:用KeymouseGo解放重复操作困境
工作流自动化革命:用KeymouseGo解放重复操作困境 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 你是否每天重复…...
如何利用内部链接来提高网站排名_网站 UX 设计对 SEO 的重要性是什么
如何利用内部链接来提高网站排名 在现代的网络环境中,如何提高网站在搜索引擎中的排名成为了每一个网站运萈者的首要任务。其中,内部链接和网站用户体验(UX)设计在搜索引擎优化(SEO)中扮演了至关重要的角色…...
CC324条提示词意外泄露——第31条让我出了一身冷汗
324条提示词意外泄露——第31条让我出了一身冷汗 原创 硅谷Alan Walker 硅谷Alan Walker 嘉妍Kea 2026年4月2日 02:47 美国 22人 在小说阅读器中沉浸阅读 当 AI 可以代替你发 Slack、fork 自己,人与 AI 的边界在哪里? src/constants/prompts.ts 57…...
seo关键词排名如何提升_seo关键词堆砌会不会被搜索引擎惩罚
SEO关键词排名如何提升_SEO关键词堆砌会不会被搜索引擎惩罚 在当前竞争激烈的网络环境中,提升SEO关键词排名已经成为网站运营者必须面对的重要课题。在追求高排名的过程中,如何避免关键词堆砌这一问题,成为了许多人关心的问题。本文将从问题…...
Free RTOS:任务状态,任务管理与调度理论
目录 1.任务状态 1.1 FreeRTOS的任务状态: 1.2 阻塞状态(Blocked) 1.3 暂停状态(Suspended) 原型如下: 1.4 就绪状态(Ready) 1.5 完整的状态转换图 1.6 代码 2.任务管理与调度理论 2.1 调度 2.2 FreeRTOS调度 STM32CubeMX FreeRTOS源码 代…...
Python预测家庭用电趋势,高并发内存池(六):释放内存全过程搭建。
Python 家庭用电数据分析与 Prophet 预测 数据准备与预处理 家庭用电数据通常包含时间戳和用电量两列,数据可能来源于智能电表或电力公司。使用 Pandas 读取 CSV 或 Excel 文件,确保时间列转换为 datetime 格式。 import pandas as pd df pd.read_csv(h…...
深入理解ThreadLocal:为什么Entry的Key必须是弱引用?
前言 ThreadLocal是Java并发编程中一个非常重要的工具类,它能为每个线程维护独立的变量副本。但很多开发者对它的理解停留在“每个线程有自己的变量副本”这个层面,对于其内部实现细节,尤其是Entry的Key为什么设计成弱引用,往往一…...
费马小定理,快速幂
今天显示延续了昨天的背包问题,先是写了一题背包问题,后面就写费马定理加快速幂。费马小定理证明如果一个数p是质数,并且a不是p的倍数,那么一定有a^(p-1)1(mod p);那么自然有a^(p-2)a^-1(mod p)…...
CenterPoint实战:基于热力图的3D目标检测与跟踪全解析
1. CenterPoint算法核心思想解析 第一次接触CenterPoint时,最让我惊讶的是它的简洁性。传统3D目标检测就像在游乐场玩"套圈"游戏——需要准备各种尺寸的圆圈(锚框)去匹配不同形状的奖品(物体),而…...
QY-DG800E实训台玩转PLC:一个按钮实现电机正反转的几种编程思路
QY-DG800E实训台玩转PLC:一个按钮实现电机正反转的几种编程思路 在工业自动化控制领域,电机正反转控制是最基础也最经典的应用场景之一。传统的继电器控制电路通常需要两个独立按钮分别控制正转和反转,但在实际工程中,我们常常会遇…...
