串口助手(串口发送接收数据, 定时, 清空, hex显示)
文章目录
- 前言
- 一、串口接收数据
- 1. 默认接收,换行,hex显示
- 2. 清空接收区数据
- 3. 保存接受区数据
- 二、串口发送数据
- 1. 默认发送
- 2. 定时发送
- 三、串口助手优化
- 1. 设置组合框当前内容。
- 2. 未检测到串口,弹出警告。
- 3. 载入文件
- 总结
前言
这篇文章继续介绍 自制串口助手。串口助手(上)
一、串口接收数据
1. 默认接收,换行,hex显示
串口接收数据时,可以选择 “接收时间”, " HEX显示", “自动换行”。

在 Qt 中,通过 QSerialPort 的 read( ) 函数可以实现串口的读取数据。
QSerialPort 会在串口有数据收到时发出 readyRead( ) 信号,可以在其槽函数里进行数据的接收。
// 连接信号与槽
connect(serial, SIGNAL(readyRead()), this, SLOT(receiveData()));
void Widget::receiveData()
{QByteArray data = serial->readAll(); // readAll() 读取串口缓冲区的所有数据bytesReceive += QString(data).size(); // size() 获取接收数据的字节大小qDebug() << bytesReceive;// 检查读取是否成功if (data.isEmpty()){qDebug() << "Failed to read the data from serial port";return;}// 处理数据if(ui->checkBox_7->isChecked()) // toHex() 转换为 hex{QString hexString = data.toHex(' ');ui->plainTextEdit->insertPlainText(hexString);}else if(ui->checkBox_10->isChecked()) // appendPlainText()换行{ui->plainTextEdit->appendPlainText(QString(data));}else if(ui->checkBox->isChecked()) // 接收时间{// currentDateTime ()获取当前时间QDateTime currentTime = QDateTime::currentDateTime(); // 显示接收时间 QString strDateTime = currentTime.toString(QString("【") + "yyyy-MM-dd hh:mm:ss" + QString("】 "));ui->plainTextEdit->insertPlainText(strDateTime);ui->plainTextEdit->insertPlainText(QString(data));}else{ui->plainTextEdit->insertPlainText(QString(data)); // 默认数据接收,}ui->label_13->setText("Received: " + QString::number(bytesReceive));
}
注意:
appendPlainText(const QString &text ) : 将带有文本的新段落附加到文本编辑的末尾。
insertPlainText ( const QString &text) : 在当前光标位置插入文本的便利插槽。
setPlainText(const QString &text): 将文本编辑的文本更改为字符串文本。将删除任何以前的文本。
2. 清空接收区数据
使用 clear( ) 函数可以清空接受区的数据。
ui->plainTextEdit->clear();
3. 保存接受区数据
- 使用 文件对话框类QFileDialog 中的静态函数 getSaveFileName 函数 ,返回用户选择要保存的文件路径 ( filename )。


-
创建一个 QFile 对象 ( file ),以写入模式( QIODevice::WriteOnly ) 打开文件。
-
使用 QTextStream 创建一个数据流 ( out ),将文件与数据流关联。
-
使用了 QPlainTextEdit 的 toPlainText( ) 函数来获取 接受区 中的所有纯文本数据。
使用数据流将 接受区中的文本写入到文件中。
详细代码:
/*得到要保存的的文件名*/
QString filename = QFileDialog::getSaveFileName(this, "另存为", "C:/", tr("Text Files(*.txt)"));/*判断文件名是否为空,文件是否保存成功*/
if(!filename.isEmpty())
{QFile file(filename);if(file.open(QIODevice::WriteOnly)){QTextStream out(&file); //数据流 写数据进文件out << ui->plainTextEdit->toPlainText();file.close(); // 关闭文件}
}
效果展示:

二、串口发送数据
1. 默认发送
使用 QSerialPort 类的 write( ) 函数进行发送。
write( ) 返回值 是 实际写入的字节数.
write(const char *data);
void Widget::sendData()
{QString data = ui->lineEdit_9->text(); // 获取要发送的文本// 由于data 是QString ,需要转换为 const char *QByteArray byteArray = data.toUtf8(); // 1.将QString -> QByteArrayconst char *data1 = byteArray.data(); // 2.获取 QByteArray 的数据指针int Send = serial->write(data1); // 3.发送数据,返回写发送的字节数bytesSend += Send; // 累计发送数据的个数ui->label_14->setText("Send: " + QString::number(bytesSend));
}
按下 “ 发送” 按钮,发送数据:
void Widget::on_send_clicked()
{sendData();
}
2. 定时发送
通过自己设置的时间间隔来定时发送数据。

定时发送 需要依靠于定时器类 QTimer 。
// 创建定时器对象QTimer timer2;timer2.setInterval(ui->ms_time->text().toInt()); // toInt将字符串转换为int类型。获取,设置时间间隔。timer2.start(); // 启动定时器// 连接信号与槽,到达时间间隔则进入 timerSend 槽函数
connect(&timer2,SIGNAL(timeout()),this,SLOT(timerSend()));
void Widget::timerSend() // 定时发送数据
{if(ui->checkBox_11->isChecked()){timer2.setInterval(ui->ms_time->text().toInt()); //更新右下角时间sendData();}
}
效果如下图:

三、串口助手优化
1. 设置组合框当前内容。
当 组合框 中有多个选项卡时,可以使用 setCurrentIndex( ) 函数来选择当前显示的选项卡。
参数 index 要显示的选项卡的索引值,选项卡的索引值从 0 开始计数。
void setCurrentIndex(int index);
2. 未检测到串口,弹出警告。
使用 QMessageBox 类的 静态成员函数 warning 来弹出消息对话框。

QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton)
其中:
- parent:指定该对话框所属的父组件,通常传入 this 即可,代表当前组件。
- title:警告对话框的标题。
- text:警告对话框的内容(警告信息)。
- buttons:指定对话框上出现的按钮。默认情况下只会显示 OK 按钮。可以选择其他的按钮,如 Yes、No、Cancel、Apply、Close 等。
- defaultButton:指定哪个按钮应该被默认选中。默认情况下不会有默认选中的按钮。
3. 载入文件
如果我们使用多文本发送数据,可以点击 " 载入",即可将保存好的文本在文本框中显示,直接发送即可。

// 1.打开文件对话框选择要打开的文件,并返回其路径
QString fileName = QFileDialog::getOpenFileName(this, "打开列表", "C:/Users/w/Desktop/test1", tr("Text Files(*.txt)"));// 2. 根据路径创建 QFile 对象
QFile file(fileName);QString one = "";
QString two = "";// 3. 以可读可写的模式打开文件
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{// 4.创建一个数据流 in,将文件与数据流关联QTextStream in(&file);// 5. 数据流读出数据in >> one;in >> two;// 6. 将文本显示在文本框中ui->lineEdit->setText(one);ui->lineEdit_2->setText(two);// 关闭文件file.close();
}
总结
大家可以在此基础上 对自制的 串口助手 加以改进和开发。
相关文章:
串口助手(串口发送接收数据, 定时, 清空, hex显示)
文章目录 前言一、串口接收数据1. 默认接收,换行,hex显示2. 清空接收区数据3. 保存接受区数据 二、串口发送数据1. 默认发送2. 定时发送 三、串口助手优化1. 设置组合框当前内容。2. 未检测到串口,弹出警告。3. 载入文件 总结 前言 这篇文章…...
bp神经网络
%% 2.读取数据(两个文件) datareadmatrix(C:\Users\Administrator\Desktop\synthetic_01.csv); file_lengthlength(data); for i1:file_length %用for循环去导入第二个csv文件 namedata(i); pathstrcat(C:\Users\Administrator\Desktop\ydata.…...
strace交叉编译后对特定文件的写流程进行监控和过滤
交叉编译 为了支持strace对pid进行解析,因系统默认支持的strace版本较低,需要使用较新的版本对strace进行交叉编译,这里使用了github上的 https://github.com/strace/strace/releases 发布的strace v5.19版本,2022-08-12发布。lo…...
初识网络之TCP网络套接字
目录 一、TCP常用网络接口 1. 监听服务器 2. 接收链接 3. 发起连接 二、实现一个简单的tcp程序 1. 日志函数 2. 服务端文件 2.1 .hpp文件 2.2 .cpp文件 3. 客户端文件 3.1 .hpp文件 3.2 .cpp文件 4. 程序测试 三、实现支持多个用户并发访问的tcp程序 1. 当前程序…...
自然语言处理从入门到应用——自然语言处理的基本问题:文本分类(Text Classification, Text Categorization)
分类目录:《自然语言处理从入门到应用》总目录 文本分类(Text Classification, Text Categorization)是最简单也是最基础的自然语言处理问题。即针对一段文本输入,输出该文本所属的类别,其中,类别是事先定义…...
【论文】——Robust High-Resolution Video Matting with Temporal Guidance浅读
视频matting 时序监督 摘要 我们介绍了一种稳健、实时、高分辨率的人类视频抠图方法,该方法取得了新的最先进性能。我们的方法比以前的方法轻得多,可以在Nvidia GTX 1080Ti GPU上以76 FPS处理4K,以104 FPS处理HD。与大多数现有的逐帧作为独…...
第四章、用户体验五要素之范围层解析(本文作用是通俗讲解,让你更容易理解)
把用户需求和产品目标转换成特定的产品时应该提供给用户什么样的内容或者功能就变成了范围层。 范围层就是定义需求。如果不能很好的定义需求,那么你的软件永远都是测试待发布版本。如果产品只是负责人脑海中的一个不定型印象,那将是灾难性的。 1、产品负…...
计算机毕业论文内容参考|基于python的农业温室智能管理系统的设计与实现
文章目录 导文文章重点前言课题内容相关技术与方法介绍技术分析技术设计技术设计技术实现方面系统测试和优化总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于python的农业温室智能管理系统的设计与实现 文章重点 前言 本文介绍了一种基于Python的农业温室智…...
Java 进阶 -- 流
Java I/O, NIO, and NIO.2 BaseStream<T, S extends BaseStream<T, S>> extends AutoCloseable 流(streams)的基本接口,流是支持顺序和并行聚合操作的元素序列。下面的例子演示了一个使用流类型stream和IntStream的聚合操作,计算红色小部件…...
硬件 TCP/IP 协议栈
目录 全硬件的TCP/IP 协议栈简介以太网接入单片机方案以太网接口芯片CH395Q 简介以太网接口芯片CH395Q 命令简介以太网接口芯片CH395Q 寄存器配置与使用移植CH395Q 源码 TCP_Client 实验TCPClient 配置流程TCPClient 实验硬件设计程序设计下载验证 WebServer 实验WebServer 简介…...
word恢复和粘贴按钮变灰色,不可用怎么办?
如果 Word 中的恢复和粘贴按钮变成灰色,可能是由于以下原因之一: 1. 文档处于只读模式。 2. 与 Office 相关的某些组件已损坏或缺失。 3. Word 的文件权限被配置为只读。 以下是一些可能的解决方法: 1. 检查文档是否处于只读模式。 如果是…...
【unity技巧】Physics2D Raycast、Overlapcircle、OverlapBox检测的用法
文章目录 分析检测地面1. 使用Raycast1.1 介绍1.3 场景窗口可视化1.4 完整实例代码1.4 存在问题1.4.1 问题11.4.2 问题2 2. 使用Overlapcircle2.1 介绍2.2 场景窗口可视化2.3 完整实例代码2.4 存在问题 3. 使用OverlapBox3.1 介绍3.2 场景窗口可视化3.3 完整实例代码3.4 注意事…...
一、kafka入门
Kafka入门 为什么要用消息中间件? 异步处理 场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种1.串行的方式;2.并行方式。 串行方式:将注册信息写入数据库成功后,发送注册邮件ÿ…...
公司新来一00后,真让人崩溃...
2022年已经结束结束了,最近内卷严重,各种跳槽裁员,相信很多小伙伴也在准备今年的金九银十的面试计划。 在此展示一套学习笔记 / 面试手册,年后跳槽的朋友可以好好刷一刷,还是挺有必要的,它几乎涵盖了所有的…...
(1Gb)S28HS01GTGZBHA030/ S28HS01GTGZBHV033/ S28HS01GTGZBHA033 FLASH - NOR闪存器件
产品简介: Infineon 带有HyperBus™的S26HSxT以及S26HLxT Semper™闪存是一种高性能、安全可靠的NOR闪存解决方案。 这些组件集成了关键的安全功能,用于汽车、工业、通信等行业的各种应用。S26HSxT和S26HLxT Semper闪存采用HyperBus接口,符…...
苹果服务端通知v2处理(AppStore Server Notifications V2)
苹果服务端通知v2处理 关键词: App Store Server Notifications V2、Python源码、苹果订阅、JWS、x5c、JSON WEB TOKEN 背景 最近要接入苹果订阅功能,调研后发现订阅生命周期内的状态变更是通过苹果服务端通知返回的(什么时候普通内购也能加上减少掉单的概率)&am…...
matlab 道路点云路缘石边界提取
目录 一、功能概述1、算法概述2、主要函数3、参考文献二、代码实现三、结果展示四、参考链接一、功能概述 1、算法概述 1、对于扫描线上的每个点,该函数计算这三个特征。 高差特征——计算一个点周围的标准偏差和高度最大差。路缘石点的标准偏差和高度差必须分别在指定的Heig…...
二叉树详解:带你掌握二叉树
目录 前言1. 树型结构1. 1 树的概念1.2 树的特点1.3 树的相关术语 2. 二叉树(binary tree)2.1 二叉树的概念2.2 二叉树中的特殊树2.2.1 满二叉树2.2.2 完全二叉树 2.3 二叉树的性质 3. 二叉树的遍历3.1 前序遍历3.2 中序遍历3.3 后序遍历3.4 层序遍历 总…...
LNMP网站框架搭建(编译安装)
目录 一、Nginx的工作原理 工作进程: 二、Nginx编译安装安装 三、mysql的编译安装 四、php的编译安装 验证PHP与nginx的是否连接 验证lnmp的是否搭建成功 五、部署 Discuz!社区论坛 一、Nginx的工作原理 php-fpm.conf 是控制php-fpm守护…...
详解Servlet API
目录 前言 HttpServlet HttpServletRequest 代码实例 打印请求信息 通过URL中的queryString进行传递。 通过post请求的body,使用form表单传递 通过POST 请求中的 body 按照 JSON 的格式进行传递 HttpServletResponse 核心方法代码实例 设置状态码 自动刷…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
