手动开发一个串口调试工具(三):基于 Qt Widgets 搭建串口调试界面

在上一篇中,我们通过 QCoreApplication 构建了一个基础的串口收发控制台程序,并实现了周期发送、十六进制转换和数据读取等核心功能。本篇将基于此逻辑,进一步将其封装为一个图形化界面程序,借助 Qt Widgets 提供的控件搭建完整的串口调试助手界面。


一、界面功能概述

该调试助手界面涵盖以下几个关键区域:

功能区域描述
串口配置区选择串口号、波特率、数据位、校验位、停止位等通信参数
串口控制按钮区控制串口打开/关闭,清除接收数据
数据接收显示区实时显示串口接收内容,支持 ASCII/HEX 格式
数据发送区输入并发送数据,支持 ASCII 或 HEX 格式
状态选项与统计区显示发送/接收选项、时间戳控制、接收字节数/帧数等统计信息

二、控件讲解与布局选择

1️⃣ 串口配置区

使用控件

  • QLabel:显示“串口号”、“波特率”等提示文字
  • QComboBox:用于列出并选择参数项(如端口号、波特率等)

设计理由

  • 下拉框可以有效防止用户输入错误;
  • 通过 QSerialPortInfo::availablePorts() 实时获取系统串口信息;
  • 使用 addItem(QString, QVariant) 可将显示值与枚举值绑定。

📌 参数填充代码示例:

// 填充串口选项
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {ui->portNameComboBox->addItem(info.portName());
}// 填充波特率
ui->baudRateComboBox->addItem("9600", QSerialPort::Baud9600);
ui->baudRateComboBox->addItem("19200", QSerialPort::Baud19200);
ui->baudRateComboBox->addItem("38400", QSerialPort::Baud38400);
ui->baudRateComboBox->addItem("115200", QSerialPort::Baud115200);
ui->baudRateComboBox->setCurrentIndex(0);// 填充数据位
ui->dataBitsComboBox->addItem("5", QSerialPort::Data5);
ui->dataBitsComboBox->addItem("6", QSerialPort::Data6);
ui->dataBitsComboBox->addItem("7", QSerialPort::Data7);
ui->dataBitsComboBox->addItem("8", QSerialPort::Data8);
ui->dataBitsComboBox->setCurrentIndex(3); // 默认8位数据// 填充停止位
ui->stopBitsComboBox->addItem("1", QSerialPort::OneStop);
ui->stopBitsComboBox->addItem("1.5", QSerialPort::OneAndHalfStop);
ui->stopBitsComboBox->addItem("2", QSerialPort::TwoStop);
ui->stopBitsComboBox->setCurrentIndex(0);// 填充校验位
ui->parityComboBox->addItem("None", QSerialPort::NoParity);
ui->parityComboBox->addItem("Even", QSerialPort::EvenParity);
ui->parityComboBox->addItem("Odd", QSerialPort::OddParity);
ui->parityComboBox->addItem("Mark", QSerialPort::MarkParity);
ui->parityComboBox->addItem("Space", QSerialPort::SpaceParity);
ui->parityComboBox->setCurrentIndex(0);

2️⃣ 串口控制按钮区

使用控件

  • QPushButton:用于“打开串口”、“关闭串口”、“清空接收框”

设计理由

  • 明确直观,结合信号槽机制控制串口对象行为。

📌 绑定示例

connect(ui->openButton, &QPushButton::clicked, this, &MainWindow::openSerialPort);

3️⃣ 数据接收显示区

使用控件

  • QTextEdit:展示接收数据内容
  • QLabel:文字标识“信息接收”

设计理由

  • 多行显示、可滚动、支持颜色高亮;
  • 设置只读,防止误操作。

📌 示例:

ui->receiveEdit->setReadOnly(true);

4️⃣ 状态显示与选项区

使用控件

  • QRadioButton:控制“显示时间”、“显示HEX”、“显示发送”、“显示接收”
  • QLineEdit(只读):显示接收字节、帧数等
  • QGroupBox:对功能分组显示

设计理由

  • QGroupBox 提升界面组织性;
  • 单选框互斥控制展示选项;
  • 实时更新统计信息,增强可视性。

5️⃣ 数据发送控制区域

使用控件

  • QLineEdit:输入待发送内容
  • QRadioButton:HEX / ASCII 模式切换
  • QPushButton:发送按钮

设计理由

  • 简单交互逻辑清晰;
  • 使用 QSerialPort::write() 发送数据。

📌 示例代码

QByteArray data = ui->sendLineEdit->text().toUtf8();
serialPort->write(data);

三、界面信号槽连接逻辑

操作控件对应信号槽函数
打开串口openButtonopenSerialPort()
接收数据处理QSerialPortreadyRead()readData()
周期性自动发送QTimertimeout()sendData()
清空接收框clearButtonreceiveEdit->clear()
模式切换(HEX)radioButton修改接收/发送解析方式

四、运行效果展示

运行程序后,用户可进行如下操作:

✅ 自动列出所有可用串口
✅ 设置通信参数后点击“打开”建立连接
✅ 接收内容实时显示,可选 HEX 和时间戳
✅ 支持 ASCII 或 HEX 方式发送
✅ 显示接收/发送字节数与帧数统计


📌 下一篇预告

《手动开发一个串口调试工具(四):功能+界面融合,完整开发串口调试助手》

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

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

相关文章

量子计算革命:重新定义计算的边界与未来

引言:我们正站在计算革命的新起点 当IBM在2019年宣布实现"量子霸权"时,很多人认为这只是实验室里的科学突破。然而,短短几年后,量子计算已经从理论走向实践,从实验室走向产业应用。我们正站在一个全新的计算…

Python 数据可视化之 Matplotlib 库

在当今数据驱动的时代,数据可视化(Data Visualization)已成为数据科学、机器学习、金融分析、工程建模等多个领域中不可或缺的一环。数据可视化不仅帮助我们更直观地理解数据的分布和趋势,还能辅助决策、展示研究成果以及增强数据…

Makefile 快速入门指南

Makefile 快速入门指南 什么是Makefile? Makefile 是一个自动化构建工具的配置文件,用于管理代码编译、测试和清理等任务。它通过定义规则(rules)来指定文件之间的依赖关系,当源文件改变时,只重新编译受影响的部分&…

Linux学习--C语言(指针4、结构体)

1.二维数组的传参int a[2][3] {1, 2, 3, 4, 5, 6};fun(a,2); int fun(int (*p)[3], int len);2.指针数组的传参char *pastr[5] {NULL};int fun(char **pstr,int len);例子&#xff1a;#include <stdio.h> #include <string.h>int InputArray(char (*p)[32], int …

【STM32】FreeRTOS 消息队列(五)

在 FreeRTOS 中&#xff0c;任务消息队列&#xff08;Message Queue&#xff09; 是一种非常关键的通信机制&#xff0c;用于在任务之间 传递数据、同步事件。 它是实现任务 解耦、异步通信 的核心工具之一&#xff0c;FreeRTOS 的消息队列是任务之间通信的桥梁。 简单点说&am…

【笔记】加速 uv 安装:系统环境变量配置国内镜像源

使用 Conda 工具链创建 UV 本地虚拟环境全记录——基于《Python 多版本与开发环境治理架构设计》-CSDN博客 命令行创建 UV 环境及本地化实战演示—— 基于《Python 多版本与开发环境治理架构设计》的最佳实践-CSDN博客 加速 uv 包安装&#xff1a;Windows 系统环境变量配置国内…

Three.js 渲染优化处理

基于项目经验和最佳实践&#xff0c;以下是渲染优化的具体处理方法&#xff1a; 1. 几何体与材质优化 使用 BufferGeometry // 推荐&#xff1a;使用 BufferGeometry 替代 Geometry const geometry new THREE.BufferGeometry();合并几何体 // 将多个几何体合并为一个以减少绘制…

Kafka——Kafka控制器

引言在Kafka集群中&#xff0c;有一个组件堪称"隐形的指挥官"——它默默协调着Broker的加入与退出&#xff0c;管理着主题的创建与删除&#xff0c;掌控着分区领导者的选举&#xff0c;它就是控制器&#xff08;Controller&#xff09;。想象一个拥有100台Broker的大…

编程与数学 03-002 计算机网络 11_域名系统(DNS)

编程与数学 03-002 计算机网络 11_域名系统&#xff08;DNS&#xff09;一、DNS的作用与功能&#xff08;一&#xff09;域名与IP地址的映射关系&#xff08;二&#xff09;DNS的层次结构二、DNS查询过程&#xff08;一&#xff09;递归查询与迭代查询&#xff08;二&#xff0…

影翎Antigravity将发布全球首款全景无人机,8月开启公测招募

7月28日&#xff0c;消费级无人机品牌「影翎Antigravity」及品牌标识官宣亮相&#xff0c;计划推出全新品类——全球首款「全景无人机」。这一消息引发行业震动&#xff0c;消费级航拍无人机市场或将迎来颠覆性飞行体验。影翎Antigravity官方介绍&#xff0c;引力不仅是束缚双脚…

SpringBoot集成Quzrtz实现定时任务

一 定时任务介绍 自律是很多人都想拥有的一种能力&#xff0c;或者说素质&#xff0c;但是理想往往很美好&#xff0c;现实却是无比残酷的。在现实生活中&#xff0c;我们很难做到自律&#xff0c;或者说做到持续自律。例如&#xff0c;我们经常会做各种学习计划、储蓄计划或减…

Java中的异常判断以及文件中的常用方法及功能

目录 异常 作用 异常的处理方式 JVM&#xff08;虚拟机&#xff09;默认的处理方式 自己处理&#xff08;捕获异常&#xff09; 抛出异常&#xff08;也就是交给调用者处理&#xff09; 自定义异常 file File中常见成员方法 判断和获取 创建和删除 获取并遍历 异常…

【C++算法】74.优先级队列_最后一块石头的重量

文章目录题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;题目链接&#xff1a; 1046. 最后一块石头的重量 题目描述&#xff1a; 解法 每次取出最重的两块石头进行碰撞&#xff0c;将剩余的石头重新放入堆中。 C 算法代码&#xff1a; class Solution …

中兴云电脑W101D2-晶晨S905L3A-2G+8G-安卓9-线刷固件包

中兴云电脑W101D2-晶晨S905L3A-2G8G-WIFI-蓝牙5.0-3个USB2.0-线刷包线刷方法&#xff1a;1、准备好一根双公头USB线刷刷机线&#xff0c;长度30-50CM长度最佳&#xff0c;同时准备一台电脑&#xff1b;2、电脑上安装好刷机工具Amlogic USB Burning Tool 软件 →打开软件 →文件…

Android OkHttp 底层原理和实战完全教程(责任链模式详解)

目录 1. OkHttp 入门:从一个请求开始 1.1 基本 GET 请求:三步走 1.2 同步 vs 异步:选择你的风格 1.3 为什么选 OkHttp? 2. 配置 OkHttpClient:打造你的专属网络引擎 2.1 超时设置:别让请求卡死 2.2 添加拦截器:窥探请求全过程 2.3 缓存:让请求更快更省流量 3. …

【RK3588部署yolo】算法篇

简历描述收集并制作军事伪装目标数据集&#xff0c;包含真实与伪装各种类型军事目标共计60余类。其中&#xff0c;包含最新战场充气伪装军事装备30余类&#xff0c;并为每一张图片制作了详细的标注。针对军事伪装目标的特点&#xff0c;在YOLOv8的Backbone与Neck部分分别加…

【Spring Boot 快速入门】一、入门

目录Spring Boot 简介Web 入门Spring Boot 快速入门HTTP 协议概述请求协议响应协议解析协议TomcatSpring Boot 简介 Spring Boot 是由 Pivotal 团队&#xff08;后被 VMware 收购&#xff09;开发的基于 Spring 框架的开源项目&#xff0c;于 2014 年首次发布。其核心目标是简…

如何调整服务器的内核参数?-哈尔滨云前沿

调整服务器内核参数是一项较为专业的操作&#xff0c;不同的操作系统调整方式略有不同&#xff0c;以下以常见的 Linux 系统为例&#xff0c;介绍一些调整服务器内核参数的一般步骤和常用参数&#xff1a;一般步骤 备份当前配置&#xff1a;在修改内核参数之前&#xff0c;先备…

C++基础:模拟实现queue和stack。底层:适配器

引言模拟实现queue和stack&#xff0c;理解适配器&#xff0c;实现起来非常简单。一、适配器 适配器是一种能让原本不兼容的接口协同工作的设计模式或者组件。它的主要作用是对一个类的接口进行转换&#xff0c;使其符合另一个类的期望接口&#xff0c;进而实现适配和复用。&am…

OI 杂题

OI 杂题字符串括号匹配例 1&#xff1a;与之前的类似&#xff0c;就是讲一点技巧&#xff0c;但是比较乱&#xff0c;凑合着看吧。 字符串 括号匹配 几何意义&#xff1a;考虑令 ( 为 111 变换&#xff0c;令 ) 为 −1-1−1 变换&#xff0c;然后对这个 1/−11/-11/−1 构成…