【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】
【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】
- 1、概述
- 2、实验环境
- 3、参考资料-致谢
- 4、自我提升+实验效果
- 视频演示
- 5、代码练习-学习后拆解-实验步骤
- (1)头文件部分-"mwaveview.h"
- (2)cpp文件部分-"mwaveview.cpp"
- (3)使用部分-"mainwindow.cpp"
- 6、提升与优化部分讲解
- (1)设置滑动条,可以手动控制绘图,更有掌控感
- (2)示波器界面随着整个外框变化。
- (3)默认选中问题。
- 7、实验样例代码
- 8、实验细节-其它问题
- (4)没图像问题。
- (5)程序异常关闭问题
- 9、总结
1、概述
最近因为要使用QT写个带类似示波器的界面,在上网找了相关资料后,质量其实有些参差不齐的,有的看的云里雾里的,有的也只是贴出来代码,真正执行起来时,对于我这种新手来说,还是有点莫不到头脑的,找到一个写的蛮不错的,学习手敲了一遍,并且做了一些优化。
因为仿照表盘排版结构,很多话都是相似,这里不多说什么了。
自己写文章习惯性将所有步骤罗列,将细节说明,也是因为整个流程大量细节,只要按照步骤来,一般能达到效果,但是如果你是针对某个问题感兴趣,那么整篇文章对你来说,文字又有点多,真是难以取舍文字应该写多写少啊~~!
2、实验环境
实验环境还是挺重要的,因为有时候,在你电脑上能运行的东西,在别人的电脑就不一定能运行,这一部分的原因就可能是实验版本不一样。
系统环境:window环境
QT软件版本:qt 5.14.2

3、参考资料-致谢
(1)上上周刚刚练习完的代码,这位博主写的不多,但是跟着练习完代码后,觉得效果挺不错,我也是照着他这份代码进行练习的,这里肯定要说下的,也是对其敬意。
参考连接:https://blog.csdn.net/qq_38190041/article/details/118856767

4、自我提升+实验效果
自己跟着代码练习一遍,然后再输出出来,通过自己理解,复制了一遍示波器,既然跟着学习,总是要有些提高的,我们用这个东西,还是希望当它是一个组件的,装在我们自己的qt工程里,遇到了不少问题,我做了些优化,这里的提升,主要是移植后优化提升与一些问题解决办法,并且尽量说清楚操作步骤。
(1)设置滑动条,可以手动控制绘图,更有掌控感
(2)示波器界面随着整个外壳变化。
(3)默认选中问题。
(4)没图像问题。
(5)程序异常关闭问题
实验效果如下

视频演示
演示链接:https://live.csdn.net/v/276851?spm=1001.2014.3001.5501
示波器延时
5、代码练习-学习后拆解-实验步骤
(1)头文件部分-“mwaveview.h”
如下图,是文件mwaveview.h,这个文件内都是一些声明定义和函数说明,让我们大致知道有哪些函数。

(2)cpp文件部分-“mwaveview.cpp”
这里主要是一些函数具体实现了,在构造函数里,进行绘画图标,而其它函数,主要是加入线段。

(3)使用部分-“mainwindow.cpp”
这部分主要是一些功能使用,以及波形绘制函数,比如设置波形停止以及放大倍数等。

6、提升与优化部分讲解
(1)设置滑动条,可以手动控制绘图,更有掌控感
这里为了能够自己控制波形,尝试加入一个滑动条,上下滑动,就可以控制通道0的线段进行上下动,从而达到自己控制效果。

(2)示波器界面随着整个外框变化。
在实际应用过程中,发现”参照资料“博主的样例,示波器是随着整个界面大小变动的,所以对这部分进行优化,也是恰巧上周刚刚弄完仪表盘,会了点提升类,发现提升类还真是个好的方式,自己理解列出下面几条。
1. 某个控件提升类后,这个控件继承了类所有实现函数。
2. 多个控件都提升相同类的话,通过这个控件,直接控制控件。
3. 一些布好局的控件,通过提升类的控件,这个提升类控件也随着布局变化。
上述说的大概什么意思呢,直接用样例来举例就明白了。
(1)如下图所示,按照参照资料之前写法,需要声明一个示波器对象,并且所有功能直接调用对象的方法,现在因为控件提升类了,所以我直接使用类似
== ui->widget->==
这样的方式就可以,同时界面随着改变。

如下为博主的代码样例对比。

(2)因为我就弄了一个示波器,这里不存在两个提升类,想了解不同控件都相同提升类,请去找标盘文章看看。
【QT 5 相关实验-仪表盘-学习笔记-表盘组件练习与使用总结】
(3)另外就是因为提升类,随着外框变动这个问题,只要在ui文件里设置一下就可以。

这里做个对比,我设置了提升类后,拉动外框,内部示波器也会变化,以下为我的样例。

这里是运行博主样例,可能博主没想到这个细节而已,我这里做了些优化。

(3)默认选中问题。
这块说明一种实现方式,通过代码设定,如下图。

7、实验样例代码
样例代码:https://download.csdn.net/download/qq_22146161/87459613
8、实验细节-其它问题
(4)没图像问题。
毕竟是自己手动敲的代码,照葫芦画瓢,碰到了两次,就是不出图形,都是代码没敲对,或者代码位置没对。

(1)第一次:就少敲了一行代码,说啥也不出,后来发现是在绘图里少了一行.

(2)第一次是在我手动练习,敲一遍代码过程中,而第二次不出图像,实在移植到自己工程里的时候,发现有不出图形,后来一条条对,发现就是因为函数放错了位置,如下图,函数开始没放到这下面,结果也不出图。

(5)程序异常关闭问题
这个算是老问题,当时提升类了,应该都用控件来调用方法的,但是忘记删除原有类了,只删除了初始化(new),因为mwaveview.h里声明了,一点控件就崩了,如下图所示,并且qt也不会给你报这个问题。

9、总结
也正是因为自己手敲的,出问题也能自己定位了,自己也懂一些东西,明白构成,知道去哪查,要是完全不练习下,拿过来就用,不出问题还好,出了问题都不知道查。
当我们觉得一份组件好用的时候,并将组件嵌入到自己工程内,一定要回来练习下,这像是欠的债一样,只有内会了,练习了,它才会成为你的,你也才能提升。
相关文章:
【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】
【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】1、概述2、实验环境3、参考资料-致谢4、自我提升实验效果视频演示5、代码练习-学习后拆解-实验步骤(1)头文件部分-"mwaveview.h"(2)cpp文件部分-"mwav…...
二维数组中的查找(两种解法,各有千秋)
凡事都有可能,永远别说永远。——《放牛班的春天》今天一题为再一个行列都有序的二维数组中寻找一个目标值,我们第一时间想到的可能是很暴力的解法,例如从头到尾进行遍历,这样能做出来,但是借用武忠祥老师的一句话&…...
quartz使用及原理解析
quartz简介 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能: 持久性作业 - 就是保持调度…...
Datawhale组队学习:大数据 D2——分布式文件系统(HDFS)
妙趣横生大数据 Day2三、Hadoop 分布式文件系统(HDFS)1. 分布式文件系统2. HDFS 简介3. HDFS 体系结构4. HDFS存储原理数据冗余存储数据存储策略数据错误与恢复5. HDFS数据读写过程读写过程HDFS故障类型和其检测方法HDFS编程实验1. 本地和集群文件间操作2. 基本文件操作3. Hado…...
CCIE重认证-300-401-拖图题全
拖图 拖图题 编程 snippet;192.168.5.0,mask 255.255.255.0;number是192.168.5.0;mask是255.255.255.0 snippets;edit-config对config,loopback对name 100,address对primary,mask…...
如何动态的创建类?type的其他用法?什么是元类,如何自定义元类?
1、python中一切都是对象,类也不例外,type是object的子类,是创建类的类。 如何动态的创建一个类? 用脚丫子创建 用脑子创建 不会 不知道什么事动态类 大家可能会有一堆的疑惑,是的我也是有很多疑惑那让我们一起来探个…...
XCP实战系列介绍15-XCP故障排查指导
本文框架 1.概述2. 通过调试器排查2.1 打开Det功能2.2 如何确定Det ErrorCode3. 通过XCP应答报文排查3.1 FE报文组成及故障码对应关系3.2 举个例子1.概述 前面几篇文章我们介绍了基于Davinci开发工具的XCP配置指导,配好了,代码也生成了,但是程序一定能正常跑起来吗?就算软…...
吉林大学软件需求分析与规范(Software Requirements Analysis Specification)
chapter0课程简介:◼ 软件工程专业核心课程之一◼ 软件工程课程体系最前端课程◼ 主要内容:需求的基本概念,需求的分类,需求工程的基本过程,需求获取的方法、步骤、技巧,需求分析和建模技术,需求…...
PyTorch - Conv2d 和 MaxPool2d
文章目录Conv2d计算Conv2d 函数解析代码示例MaxPool2d计算函数说明卷积过程动画Transposed convolution animationsTransposed convolution animations参考视频:土堆说 卷积计算 https://www.bilibili.com/video/BV1hE411t7RN 关于 torch.nn 和 torch.nn.function t…...
leetcode Day2(昨天实习有点bug,心态要崩了)
int carry 0;for(int i a.size() - 1, j b.size() - 1; i > 0 || j > 0 || carry; --i, --j) {int x i < 0 ? 0 : a[i] - 0;int y j < 0 ? 0 : b[j] - 0;int sum (x y carry) % 2;carry (x y carry) / 2;str.insert(0, 1, sum 0);}return str;加一&a…...
另一种思考:为什么不选JPA、MyBatis,而选择JDBCTemplate
以下内容转载自:https://segmentfault.com/a/1190000018472572 作者:scherman 因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的…...
LeetCode 338. 比特位计数
给你一个整数 n ,对于 0 < i < n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n 1 的数组 ans 作为答案。 示例 1: 输入:n 2 输出:[0,1,1] 解释: 0 --> 0 1 --> …...
排序评估指标——NDCG和MAP
在搜索和推荐任务中,系统常返回一个item列表。如何衡量这个返回的列表是否优秀呢? 例如,当我们检索【推荐排序】,网页返回了与推荐排序相关的链接列表。列表可能会是[A,B,C,G,D,E,F],也可能是[C,F,A,E,D],现在问题来了…...
[Android Studio] Android Studio Virtual Device(AVD)虚拟机的功能试用
🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 🚀write…...
kafka-3-kafka应用的核心要点和内外网访问
kafka实战教程(python操作kafka),kafka配置文件详解 Kafka内外网访问的设置 1 kafka简介 根据官网的介绍,ApacheKafka是一个分布式流媒体平台,它主要有3种功能: (1)发布和订阅消息流,这个功能类似于消息队列&#x…...
VS2017+OpenCV4.5.5 决策树-评估是否发放贷款
决策树是一种非参数的监督学习方法,主要用于分类和回归。 决策树结构 决策树在逻辑上以树的形式存在,包含根节点、内部结点和叶节点。 根节点:包含数据集中的所有数据的集合内部节点:每个内部节点为一个判断条件,并且…...
Prometheus 记录规则和警报规则
前提环境: Docker环境 涉及参考文档: Prometheus 录制规则Prometheus 警报规则 语法检查规则 promtool check rules /path/to/example.rules.yml一:录制规则语法 groups 语法: groups:[ - <rule_group> ]rule_group…...
(API)接口测试的关键技术
接口测试也就是API测试,从名字上可以知道是面向接口的测试活动。所以在讲API测试之前,我们应该说清楚接口是什么,那么接口就是有特定输入和特定输出的一套逻辑处理单元,而对于接口调用方来说,不用知道自身的内部实现逻…...
快速排序算法原理 Quicksort —— 图解(精讲) JAVA
快速排序是 Java 中 sort 函数主要的排序方法,所以今天要对快速排序法这种重要算法的详细原理进行分析。 思路:首先快速排序之所以高效一部分原因是利用了离散数学中的传递性。 例如 1 < 2 且 2 < 3 所以可以推出 1 < 3。在快速排序的过程中巧…...
linux环境搭建私有gitlab仓库
搭建之前,需要安装相应的依赖包,并且要启动sshd服务(1).安装policycoreutils-python openssh-server openssh-clients [rootVM-0-2-centos ~]# sudo yum install -y curl policycoreutils-python openssh-server openssh-clients [rootVM-0-2-centos ~]…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
