零基础C++开发上位机--基于QT5.15的串口助手(三)

news2025/2/28 6:12:44

本系列教程本着实践的目的,争取每一节课都带大家做一个小项目,让大家多实践多试验,这样才能知道自己学会与否。

接下来我们这节课,主要学习一下QT的串口编程。做一款自己的串口助手,那么这里默认大家都是具备串口通信的背景知识的。当然你也可以不知道这个背景知识,跟着试试学一下,其实就是一个设备传输数据,通过某种格式传给电脑显示出来。而去处理这些数据显示C++本身自带各种库方便我们去调用。所以说你只需要知道串口通信需要具备哪些参数即可,这些参数是固定死的,必须遵循的。

这里左上角是通信成功必须设置的参数,通信的两个设备必须设置成一样才可以成功发送或者接收数据。我们按照上面的例子做一个自己的串口软件。

一、创建工程

大家熟悉的流程。借着创建一个新的Ui我们再利用这个新项目再来走一遍。 

我们还是先新建一个widget窗口的应用。点击选择即可。

重新创建一个文件夹,命名为Serial Assistant,项目名称也一样,一定要养成喜欢,必须全部都是纯英文或数字,有困难的就用汉语拼音和数字。总之一定不要用中文。

接下来还是我们要创建一个widget窗口,直接选即可。

然后其他一顿无脑点击下一步,完成进入工程开始编程。

二、Ui设计

既然是面向对象的编程,我们跳出以前的框架。直接先把Ui界面设计好,再来详细开发内部的功能互动。让Ui界面来指导我们怎么一步一步做。一开始的Ui界面我们先仿照别人的做,然后在以后的调试使用的过程中再自己慢慢优化。

1.摆放输入框和按钮标签

各位同学按照我的箭头摆放对应的控件。稍后为大家解释各个都是什么功能。

Combo Box----可以在箭头处选择框内的内容

Line Edit----输入信息对话框

Plain Text Edit----接收信息显示框

PushButton----上节课用到过的按钮

TextLabel----上节课用到过的显示文本

2.控件命名

虽然简陋,但是作为新手来说我已经很满足了。后续的我们学会了基本功能之后再做优化和美化即可。

接下来先编译一下程序,养成好的习惯,切勿上来编写一个大程序一步到位,结果编译时候全是错误无从入手。

程序运行无错误,可直接运行界面,接下来我们使用QT的布局工具,对界面进行排布。

3.界面布局

 a.水平布局

对Combo Box和其右侧的文本进行水平布局。记住,是每一个都单独的水平布局。

做完单独的水平布局后,就是框选刚才所有完成水平布局的控件进行垂直布局。

b.垂直布局

点击上面菜单栏的垂直布局。

垂直布局之后,将其拖拽到左下角,我们开始布局其他的控件。

C.间隔柱

当我们单独对按钮等控件进行水平布局和垂直布局时候,系统会默认让他们挨的很近,并保持等间距。但是有时候我们希望它们能分散开等间距排布,这时候我们就需要使用到间隔柱这个排布工具。

当我们使用水平布局时候需要使用到水平间隔柱,如果是垂直布局需要使用垂直间隔柱。

然后我们统一进行水平布局就是上图的效果了。再我们把发送数据区和发送框单独水平布局。

接下来对1和2两个水平布局完成的控件整体进行垂直布局,就更加整齐了。

在菜单栏直接点击栅格布局,对整体界面进行排布。将标签文本进行居中处理后运行程序试试看效果。

我们可以任意拖拽窗口,大家可以看到完成布局的窗口的界面是可以跟随窗口一起任意放大缩小的。

三、控件设置

以下内容与串口的通信规则规范相关,建议掌握一些基础知识,这样看起来更通透一些。不看也可以,就是死记硬背。

1.Combo Box设置

双击其中的控件,在弹出的对话框点击绿色的加号,再添加自己要的内容。

波特率设置

数据位设置

校验位设置

停止位设置

不知道设置什么内容的,直接打开例子软件就可以了,这里我们看看自己的软件效果。

有一点问题,就是目前显示的数值并不是我们常用的数值。

2.默认数值设置

 

选择对应的控件,再右下角的属性里面找到”currentindex“,修改对应的数值,可以选择不同currentText显示。

好了,我们的默认数据也设置完成了。

3.控件对象命名

这里的控件命名,与之前的第二节命名不一样,我们这里的控件对象命名,是真正用到程序中的命名,有助于其他人读懂我们的程序,也方便我们自己的维护升级。之前的控件命名仅仅是显示名称。

右侧的对象名称,大家可以看到,现在我们的控件按钮等等统统都叫什么名字。全是按钮1,按钮2,按钮3,这些在程序里面使用的时候我们根本无法维护。所以,我们将他们形象的改成跟显示名称类似的名称,方便开发程序。

对上面每一个需要开发的控件对象进行命名,确保一看就指导其功能作用。不用回来看Ui界面即可。

好了,到这里Ui界面基本完成了。后续只需要个别优化即可了。

四、程序开发

1.工程文件serial_assistant.pro

QT里面自带了好多库,我们直接调用即可,只需要引用其类即可。在第一行加入serialport。

QT       += core gui  serialport

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

2.项目文件widget.cpp

心细的同学,是否发现了我们之前程序运行后,在端口那块的控件并没有任何显示。这一块不是我们预制的内容,它是当我们连接不同设备时候,系统可以默认搜索到可用的端口并显示。也就是说,搜索可用端口是能否通信的大前提。所以我们第一步先来查询可以用的端口。

#include "widget.h"
#include "ui_widget.h"
#include <QSerialPortInfo>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QStringList serialNamePort;

    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        serialNamePort<<info.portName();
    }
    ui->Serialport_comboBox->addItems(serialNamePort);
}

Widget::~Widget()
{
    delete ui;
}

加入头文件后,增加搜索可以端口的语句即可完成对串口的搜索。这些都是自带的库供我们调用的结果。

好了,我们可以看到端口处自动搜索到了可用的com2。之后,我们就可以开始真正的通信变成了。今天先讲到这里。大家课后一定要多练习多实践。

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

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

相关文章

keil的首次尝试,芯片为stm32F103C6T6

已经试了一下&#xff0c;吐槽这个软件的使用好麻烦啊 安装 然后先去安装对应的pack 这个鬼玩意里找对应的芯片&#xff0c;或者去官网上下载 我是在这里搜到芯片&#xff0c;再去官网下载一个驱动 https://www.keil.arm.com/packs/stm32f1xx_dfp-keil/boards/ 会有一个安装…

Laravel04 eloquent

eloquent 1. eloquent2. 创建eloquent model 以及 取数据 1. eloquent 文档地址&#xff1a; https://learnku.com/docs/laravel/8.x/eloquent/9406 下面是我们&#xff0c;通过laravel的DB类从数据库中获取了post记录&#xff0c;那么有没有可能我们直接获取一个post对象&am…

音频常用测试参数

一、总谐波失真&#xff08;THDN&#xff09; 总谐波失真指音频信号源通过功率放大器时&#xff0c;由于非线性元件所引起的输出信号比输入信号多出的额外谐波成份。谐波失真是由于系统不是完全线性造成的&#xff0c;我们用新增加总谐波成份的均方根与原来信号有效值的百分比来…

如何远程访问内网数据库?

天联是一种专门为远程访问内网数据库而设计的组网解决方案。由于其操作简单、跨平台应用、无网络要求以及独创的安全加速方案等原因&#xff0c;天联在几十万用户中广泛应用&#xff0c;解决了各行业客户的远程连接需求。通过采用穿透技术&#xff0c;天联实现了简单易用的远程…

基于雷达影像的洪水监测技术方法详解

洪水发生时候大多数是阴雨天气&#xff0c;光学影像基本上拍不到有效影像。雷达影像这时候就能发挥其不受天气影像的优点。现在星载的雷达卫星非常多&#xff0c;如高分三号、陆探一号、海丝一号&#xff08;巢湖一号&#xff09;、哨兵1号等。本文以哨兵1号L1地距(GRD)产品来介…

在Pycharm中运行Django项目如何指定运行的端口

方法步骤&#xff1a; 打开 PyCharm&#xff0c;选择你的 Django 项目。在菜单栏中&#xff0c;选择 “Run” -> “Edit Configurations...”。在打开的 “Run/Debug Configurations” 对话框中&#xff0c;选择你的 Django server 配置&#xff08;如果没有&#xff0c;你…

nginx(三)重写功能 防盗链 方向代理 等

return 可以写在location server if 里面 return用于完成对请求的处理&#xff0c;并直接向客户端返回响应状态码&#xff0c;比如:可以指定重定向URL(对于特殊重定向状态码&#xff0c;301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等)&#xff0c;处于此指令后…

simple-pytest 框架使用指南

simple-pytest 框架使用指南 一、框架介绍简介框架理念&#xff1a;框架地址 二、实现功能三、目录结构四、依赖库五、启动方式六、使用教程1、快速开始1.1、创建用例&#xff1a;1.2、生成py文件1.3、运行脚本1.3.1 单个脚本运行1.3.2 全部运行 1.4 报告查看 2、功能介绍2.1、…

JAVA高并发——CompletableFuture

CompletableFuture是Java 8新增的一个超大型工具类。为什么说它大呢&#xff1f;因为它实现了Future接口&#xff0c;而更重要的是&#xff0c;它也实现了CompletionStage接口。CompletionStage接口也是Java 8中新增的&#xff0c;它拥有多达40种方法&#xff01;是的&#xff…

大数据职业技术培训包含哪些

技能提升认证考试&#xff0c;旨在通过优化整合涵盖学历教育、职业资格、技术水平和高新技术培训等各种教育培训资源&#xff0c;通过大数据行业政府引导&#xff0c;推进教育培训的社会化&#xff0c;开辟教育培训新途径&#xff0c;围绕大数据技术人才创新能力建设&#xff0…

k8s pv与pvc理解与实践

参考文章&#xff1a; https://blog.csdn.net/qq_41337034/article/details/117220475 一、 pv/pvc简述 Pv是指PersistentVolume&#xff0c;中文含义是持久化存储卷是对底层的共享存储的一种抽象&#xff0c;Pv由管理员进行配置和创建&#xff0c;只要包含存储能力&#xff…

vue3使用elementPlus进行table合并处理

elementPlus中table合并部分列 虚拟数据中公司下有多个客户&#xff0c;公司一样的客户&#xff0c;公司列需要合并&#xff0c;客户如果一样也需要合并进行展示&#xff0c;效果展示 const tableData ref([])自定定义自已想要的数据&#xff0c;一般都是通过接口拿到 //table…

CPU处理器NUMA架构简介

在实际工作中&#xff0c;经常遇到服务器是否开启NUMA、NUMA绑定几颗Core、跨NUMA节点访问的性能下降等等话题。那么NUMA作为非一致性内存访问的多处理器架构&#xff0c;在架构上有什么特性、与SMP架构有哪些不同&#xff0c;调优策略等&#xff0c;本文将作简要介绍。 1、CPU…

什么是SSH端口转发?

目录 前言&#xff1a; 一、SSH端口转发的概念 二、SSH端口转发的类型 2.1 本地端口转发 2.2 远程端口转发 2.3 动态端口转发 三、SSH端口转发的用途 3.1 安全远程访问 3.2 跨越网络限制 3.3 加密流量传输 3.4 跨越 NAT 网络 3.5 安全代理 四、总结 前言&#xff…

设计模式浅析(九) ·模板方法模式

设计模式浅析(九) 模板方法模式 日常叨逼叨 java设计模式浅析&#xff0c;如果觉得对你有帮助&#xff0c;记得一键三连&#xff0c;谢谢各位观众老爷&#x1f601;&#x1f601; 模板方法模式 概念 模板方法模式&#xff08;Template Method Pattern&#xff09;在Java中是…

【MATLAB】VMD_ MFE_SVM_LSTM 神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 VMD_MFE_SVM_LSTM神经网络时序预测算法是一种结合了变分模态分解&#xff08;VMD&#xff09;、多尺度特征提取&#xff08;MFE&#xff09;、支持向量机&#xff08;SVM&#xff09;和长…

Java+SpringBoot+Vue+MySQL:美食推荐系统的技术革新

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

启动spark-shell时报错java.lang.NumberFormatException: For input string: “0x100“

一、问题描述 安装完Spark后&#xff0c;启动spark shell时报错 java.lang.NumberFormatException: For input string: "0x100" 如下图&#xff1a; 二、解决办法 1.更换scala的版本 2.更改环境变量 使用vim编辑器打开用户的环境变量配置文件 vim ~/.bashrc s…

解锁财务信任,掌握企业业务合作中的倾听艺术

企业在经营管理过程中&#xff0c;经常会思考如何才能成为一个完美的财务业务融合体&#xff0c;实现业务合作的最大价值。当我们置身于企业战略规划的构建过程中&#xff0c;就会明显的感觉到&#xff0c;获得财务信任有助于指导团队做出重大决策并推动企业未来的行动。市场和…

【蓝桥杯单片机入门记录】动态数码管

目录 一、数码管动态显示概述 二、动态数码管原理图 &#xff08;1&#xff09;原理图 &#xff08;2&#xff09;动态数码管如何与芯片相连 &#xff08;3&#xff09;“此器件” ——>锁存器74HC573 三、动态数码管显示例程 &#xff08;1&#xff09;例程1&#xf…