【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】

news2024/11/16 5:23:09

【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、总结

也正是因为自己手敲的,出问题也能自己定位了,自己也懂一些东西,明白构成,知道去哪查,要是完全不练习下,拿过来就用,不出问题还好,出了问题都不知道查。

当我们觉得一份组件好用的时候,并将组件嵌入到自己工程内,一定要回来练习下,这像是欠的债一样,只有内会了,练习了,它才会成为你的,你也才能提升。

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

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

相关文章

UDP数据报套接字编程

DatagramSocket API DatagramSocket 是UDP Socket,用于发送和接收UDP数据报。 DatagramSocket 构造方法: DatagramSocket 方法: DatagramPacket API DatagramPacket是UDP Socket发送和接收的数据报。 DatagramPacket 构造方法&#xff…

本地生成动漫风格 AI 绘画 图像|Stable Diffusion WebUI 的安装和局域网部署教程

Stable Diffusion WebUI 的安装和部署教程1. 简介2. 安装环境2.1 Windows2.2 Linux3. 运行4. 模型下载链接5. 局域网部署5.1 Windows5.2 Linux6. 其他资源1. 简介 先放一张WebUI的图片生成效果图,以给大家学习的动力 :) 怎么样,…

浅析SAS协议(1):基本介绍

文章目录概述SAS协议发展历程SAS技术特性SAS设备拓扑SAS phySAS地址SAS设备类型SAS协议分层参考链接概述 SAS,全称Serial Attached SCSI,即串行连结SCSI,是一种采用了串行总线的高速互连技术。通过物理上使用串行总线连结,在链路…

用一行Python代码,为图片上水印版权!

今天一个朋友跟我吐槽:前段时间,我辛辛苦苦整理的一份XX攻略,分享给自己的一些朋友,结果今天看到有人堂而皇之地拿着这份攻略图片去引流,并声称是自己整理的,真是岂有此理!他自己总结吃一堑长一…

超低成本DDoS攻击来袭,看WAF如何绝地防护

一、DDoS攻击,不止于网络传输层 网络世界里为人们所熟知的DDoS攻击,多数是通过对带宽或网络计算资源的持续、大量消耗,最终导致目标网络与业务的瘫痪;这类DDOS攻击, 工作在OSI模型的网络层与传输层,利用协…

【MyBatis】源码学习 03 - 类型处理器 TypeHandler

文章目录前言参考目录学习笔记1、type 包中类的归类总结2、类型处理器2.1、TypeReference 类3、类型注册表3.1、TypeHandlerRegistry#getTypeHandler前言 本文内容对应的是书本第 8 章的内容,主要是关于类型处理器 TypeHandler 的学习。 这一章节的学习有些地方理…

Java爬虫——WebMagic案例

抓取51Job的招聘信息一, Scheduler组件在解析页面的时候,很可能会解析出相同的url地址(例如商品标题和商品图片超链接,而且url一样),如果不进行处理,同样的url会解析处理多次,浪费资源。所以我们需要有一个…

【Unity3d】Unity与Android之间通信

在unity开发或者sdk开发经常遇到unity与移动端原生层之间进行通信,这里把它们之间通信做一个整理。 关于Unity与iOS之间通信,参考【Unity3d】Unity与iOS之间通信 Unity(c#)调用Android (一)、编写Java代码 实际上,任何已经存在的Java代码…

【webpack5】一些常见优化配置及原理介绍(二)

这里写目录标题介绍sourcemap定位报错热模块替换(或热替换,HMR)oneOf精准解析指定或排除编译开启缓存多进程打包移除未引用代码配置babel,减小代码体积代码分割(Code Split)介绍预获取/预加载(prefetch/pre…

HydroD 实用教程(四)水动力模型

目 录一、前言二、Hydro Properties2.1 Compartment Properties2.2 Rudder and Thruster2.3 Wind Properties三、Hydro Structure3.1 Load Cross Sections四、Loading Conditions4.1 Mass Model4.2 Second Order Surface Model4.3 Wadam Offbody Points4.4 Additional Matrices…

Redis的常见操作和Session的持久化

安装Redis使用yum命令,直接将redis安装到linux服务器:yum -y install redis启动redis使用以下命令,以后台运行方式启动redis:redis -server /etc/redis.conf &操作redis使用以下命令启动redis客户端:redis-cli设置…

vscode连接服务器(腾讯云)

文章目录1. vscode远程总是报错2. vscode能连上腾讯云但密码不对或者登录后不能打开文件或文件夹1. vscode远程总是报错 报错如图所示 Could not establish connection to *** 过程试图写入的管道不存在。 在百度、csdn找了好久都是说删掉.ssh文件下的某个文件但我压根没有&a…

使用 nutjs实现前端RPA需求

nutjs 相关概念 nut.js 是 Node.js 的桌面自动化框架,我们可以使用 js / ts 来控制鼠标和键盘,来模拟人的操作完成一系列动作。它主要分为以下三块内容: KeyboardMouseScreen Keyboard 常用 API type: 它允许我们输入 键 或 字符串&#…

linux013之文件和目录的权限管理

用户、组、文件目录的关系: 简介:用户和组关联,组合文件目录关联,这样就实现了用户对文件的权限管理。首先来看一下,一个文件或目录的权限是怎么查看的,ls -l, 如下,这个信息怎么看呢…

71. Python 库与模块

71. 库与模块 文章目录71. 库与模块1. Python 就是一个解释器2. 什么模块3. 什么是包5. 什么是库6. 形象理解模块与库7. 库的分类1. 标准库2. 第三方库8. 总结1. Python 就是一个解释器 我们把程序员编写的代码形象理解为写了一个纯文本文件。 我们希望这个文本文件能被计算机…

锁相环(1)

PLL代表相位锁定环。顾名思义,如下图所示,PLL是一种具有反馈循环的电路,可将反馈信号的相/频率保持与参考输入信号的相/频率相同(锁定)。 如下图所示,如果参考输入和反馈输入之间存在相位差,则…

是德Keysight E4991A/e4991B射频阻抗/材料分析仪

Keysight E4991A 射频阻抗/材料分析仪提供终极阻抗测量性能和强大的内置分析功能。它将为评估 3 GHz 范围内组件的组件和电路设计人员的研发提供创新。E4991A 使用 RF-IV 技术,而不是反射测量技术,可在宽阻抗范围内进行更精确的阻抗测量。基本阻抗精度为…

在屎山代码中快速找到想要的代码法-锁表法(C#)

由于本人水平有限,文中有写得不对的地方请指正,本文的方法有些投机取巧,实在是没招的情况下可以酌情使用,如有侵权,请联系删除。 前几天接到一个需求,要在医嘱签署时对检验项目进行分方操作,分…

Linux Socket Buffer介绍

一. 前言 Linux内核网络子系统的实现之所以灵活高效,主要是在于管理网络数据包的缓冲器-socket buffer设计得高效合理。在Linux网络子系统中,socket buffer是一个关键的数据结构,它代表一个数据包在内核中处理的整个生命周期。 二. Socket Bu…

2.5|iot|第1章嵌入式系统概论|操作系统概述|嵌入式操作系统

目录 第1章: 嵌入式系统概论 1.嵌入式系统发展史 2.嵌入式系统定义* 3.嵌入式系统特点* 4.嵌入式处理器的特点 5.嵌入式处理分类 6.嵌入式系统的应用领域及嵌入式系统的发展趋势 第8章:Linux内核配置 1.内核概述 2.内核代码结构 第1章&#xf…