当前位置: 首页 > news >正文

零基础C++实战上位机--基于QT5.15的串口调试工具(一)

1. 为什么你需要自己开发串口调试工具

作为一个嵌入式开发者,我猜你一定遇到过这样的场景:单片机程序跑飞了,你急需要查看某个变量的实时数据;或者产品测试时,客户需要直观地看到传感器采集的数据。这时候,一个顺手好用的串口调试工具简直就是救命稻草。

市面上的串口助手确实不少,从老牌的串口猎人、XCOM到各种开源工具,选择很多。但用着用着就会发现,这些通用工具总有些地方不够顺手:界面太复杂、功能太多余、数据格式不支持...更别提那些突然崩溃丢失数据的糟心时刻。我遇到过最尴尬的情况是,在给客户演示时,串口助手突然卡死,场面一度十分尴尬。

自己开发串口工具的好处显而易见:

  • 完全自定义:你可以设计最适合当前项目的界面布局
  • 功能精准匹配:只保留需要的功能,去掉冗余选项
  • 数据可视化:针对特定数据类型做定制化显示
  • 稳定性可控:自己写的代码,出问题知道怎么修

更重要的是,这其实是个绝佳的C++实战项目。通过开发串口工具,你能系统掌握:

  • QT框架的UI开发流程
  • 串口通信的核心原理
  • 数据解析与显示技巧
  • 软件打包发布的全流程

2. 开发环境准备:QT5.15安装详解

2.1 QT安装前的准备工作

QT从5.15版本开始改变了安装策略,官方只提供在线安装方式。这里分享几个实测有效的提速技巧:

首先访问QT官方下载页面(建议使用Chrome浏览器),找到5.15.2版本。虽然最新版已经到6.x,但考虑到稳定性与兼容性,5.15仍然是工业领域的首选。

注册QT账号时有个小技巧:使用企业邮箱注册成功率更高。遇到过有开发者用免费邮箱收不到验证码的情况。注册完成后,建议先登录一次账号,确保状态正常。

2.2 组件选择指南

安装过程中最关键的环节就是组件选择。根据多年经验,推荐这样配置:

必选组件

  • Qt Creator 4.11.0(集成开发环境)
  • Qt 5.15.2 → MinGW 8.1.0 64-bit(编译器)
  • Qt Charts(数据可视化)
  • Qt SerialPort(串口支持)

可选组件

  • Qt Virtual Keyboard(如果需要触屏输入)
  • Qt Quick 3D(3D可视化需求)
  • Qt Multimedia(音视频处理)

安装路径有个注意事项:路径中不要包含中文或空格。我习惯放在C:\Qt这样的简单路径下,避免后续各种奇怪的兼容性问题。

安装完成后,建议立即运行Qt Creator,检查是否能正常启动。如果遇到"缺少dll"之类的错误,通常是环境变量没配置好。可以手动添加C:\Qt\5.15.2\mingw81_64\bin到系统Path变量。

3. 创建第一个QT项目

3.1 项目初始化步骤

打开Qt Creator后,跟着这些步骤操作:

  1. 点击"新建项目"
  2. 选择"Application" → "Qt Widgets Application"
  3. 命名项目为SerialTool(注意全英文)
  4. 选择qmake构建系统
  5. 基类选择QWidget
  6. 使用默认的MinGW编译器

创建完成后,你会看到这样的项目结构:

SerialTool/ ├── SerialTool.pro # 项目配置文件 ├── main.cpp # 程序入口 ├── widget.h # 主窗口头文件 ├── widget.cpp # 主窗口实现 └── widget.ui # 界面设计文件

3.2 关键配置文件解析

打开SerialTool.pro文件,我们需要添加串口支持模块:

QT += core gui serialport greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

这个文件相当于项目的总控开关,所有依赖库都在这里声明。后续如果需要添加图表、网络等功能,也是在这里添加对应的模块。

main.cpp文件通常不需要修改,保持默认即可。它的核心作用是创建应用程序实例并显示主窗口:

#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }

4. 设计串口工具界面

4.1 基础UI布局设计

双击widget.ui文件进入设计模式。我们先搭建一个最基础的串口工具界面:

  1. 从左侧Widget Box拖拽以下控件:

    • 3个ComboBox(串口选择、波特率、校验位)
    • 1个PushButton(打开/关闭串口)
    • 2个TextEdit(发送区、接收区)
    • 2个PushButton(发送、清空)
  2. 使用Vertical Layout和Horizontal Layout进行排版,确保窗口缩放时控件能自适应

  3. 设置关键控件对象名(后面编程要用):

    • 串口选择:comboPort
    • 波特率选择:comboBaud
    • 打开按钮:btnOpen
    • 发送文本框:textSend
    • 接收文本框:textRecv

4.2 界面美化技巧

想让界面更专业?试试这些技巧:

  • 使用QSS设置样式:
QPushButton { min-width: 80px; padding: 5px; background: #3498db; color: white; border-radius: 4px; }
  • 为接收区设置等宽字体:
textRecv->setFont(QFont("Courier New", 10));
  • 添加状态栏显示连接状态
  • 使用QSplitter让发送/接收区可以自由调整大小

5. 实现串口通信功能

5.1 串口初始化代码

widget.h中添加头文件和成员变量:

#include <QSerialPort> #include <QSerialPortInfo> private: QSerialPort *serial;

在Widget类的构造函数中初始化串口对象:

Widget::Widget(QWidget *parent) : QWidget(parent) { // ...其他初始化代码 serial = new QSerialPort(this); connect(serial, &QSerialPort::readyRead, this, &Widget::readData); // 扫描可用串口 foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { comboPort->addItem(info.portName()); } // 设置常用波特率 QStringList baudRates = {"9600", "19200", "38400", "57600", "115200"}; comboBaud->addItems(baudRates); comboBaud->setCurrentText("115200"); }

5.2 核心功能实现

添加打开/关闭串口的槽函数:

void Widget::on_btnOpen_clicked() { if(serial->isOpen()) { serial->close(); btnOpen->setText("打开串口"); } else { serial->setPortName(comboPort->currentText()); serial->setBaudRate(comboBaud->currentText().toInt()); serial->setDataBits(QSerialPort::Data8); serial->setParity(QSerialPort::NoParity); serial->setStopBits(QSerialPort::OneStop); if(serial->open(QIODevice::ReadWrite)) { btnOpen->setText("关闭串口"); } else { QMessageBox::critical(this, "错误", "无法打开串口!"); } } }

实现数据接收函数:

void Widget::readData() { QByteArray data = serial->readAll(); textRecv->moveCursor(QTextCursor::End); textRecv->insertPlainText(data); }

6. 高级功能扩展

6.1 十六进制显示与发送

很多嵌入式场景需要处理十六进制数据。我们可以添加一个CheckBox来控制显示模式:

void Widget::on_checkHex_stateChanged(int state) { isHexMode = (state == Qt::Checked); } void Widget::readData() { QByteArray data = serial->readAll(); QString displayText; if(isHexMode) { displayText = data.toHex(' ').toUpper(); } else { displayText = QString::fromLocal8Bit(data); } textRecv->append(displayText); }

6.2 数据发送优化

增强发送功能,支持定时发送和换行符处理:

void Widget::on_btnSend_clicked() { QString text = textSend->toPlainText(); if(isHexMode) { QByteArray hexData = QByteArray::fromHex(text.toLatin1()); serial->write(hexData); } else { if(checkNewLine->isChecked()) { text += "\r\n"; } serial->write(text.toLocal8Bit()); } }

7. 软件打包与发布

7.1 Release版本生成

  1. 将构建模式切换为Release
  2. 点击"构建"→"重新构建项目"
  3. 生成的exe位于build-SerialTool-Release/release目录

7.2 使用windeployqt打包

打开QT命令行工具,执行:

cd /d D:\Projects\SerialTool\build-SerialTool-Release\release windeployqt SerialTool.exe

这个命令会自动收集所有依赖的dll文件。要制作绿色版软件,只需将整个release文件夹打包即可。如果需要安装包,可以使用Inno Setup等工具制作专业安装程序。

第一次运行打包后的程序时,可能会遇到缺少VC++运行库的问题。解决方法有两种:要么让用户提前安装运行库,要么静态编译QT程序(但这会显著增大程序体积)。

http://www.jsqmd.com/news/852025/

相关文章:

  • R语言ggplot2实战:在染色体图谱上精准可视化基因与功能区间
  • WinPmem:专业级Windows物理内存取证采集工具深度解析
  • 2026TOP5广州市番禺区黄金,白银,铂金回收门店推荐及联系方式权威发布 - 前途无量YY
  • 2026石家庄上门黄金回收推荐,三家热门机构,金裕恒最火 - 润富黄金珠宝行
  • 视频批量混剪新玩法:如何用AI一键生成千条原创带货视频?
  • 2026TOP5成都市青羊区黄金,白银,铂金回收门店推荐及联系方式权威发布 - 前途无量YY
  • GB28181国标平台接入NVR通道数为0:从信令交互到网络配置的深度排查指南
  • 163MusicLyrics:高效获取网易云音乐与QQ音乐歌词的跨平台工具
  • PyQt6 进阶实践:为 QTableWidget 打造 Excel 级右键菜单,实现高效数据编辑与格式管理
  • Kindle Comic Converter:终极漫画电子书转换解决方案
  • 【2026最新版|建议收藏】程序员/小白入门大模型指南,避开90%坑,精准对接企业急招需求
  • 2026TOP5广州市海珠区黄金,白银,铂金回收门店推荐及联系方式权威发布 - 前途无量YY
  • 如何在5个关键步骤中掌握Simscape Electrical电机控制器设计?
  • 免费开源工程计算神器Calcpad:3步告别繁琐手算,轻松搞定专业报告 [特殊字符]
  • CW32开发者扶持计划深度解析:从MCU入门到项目实战全攻略
  • IQtree v2.1.3 用SNP数据给进化树生根?我踩过的坑你可别再踩了
  • 别再对着陀螺仪数据发愁了!用MPU6050和四元数搞定稳定姿态角(附C代码)
  • 从零到一:DevEco Studio 环境配置与首个ArkTS应用实战
  • 从V-LOAM到LVI-SAM:聊聊那些年我们用过的多传感器融合SLAM开源方案
  • Windows字体自定义的终极解决方案:No!! MeiryoUI深度使用指南
  • C#工控上位机开发避坑指南:从Panel布局到多窗体切换的5个实战技巧
  • 观察taotoken用量看板如何帮助掌控ai项目月度api支出
  • 手把手教你用ENA-TDR实测USB3.0线:从接头阻抗突变到远端串扰的完整操作流程
  • 【收藏级】2026年大模型系统化学习路线(小白+程序员专属),避开90%弯路快速入门进阶
  • ENVI 5.6 保姆级教程:手把手搞定 Landsat 8 影像的辐射定标与大气校正
  • 测试工程师的团队协作:如何与开发、产品团队高效协作
  • 2026年金属拉力试验机哪个品牌好?主流厂家性能对比与应用解析 - 品牌推荐大师
  • 在 Node.js 后端服务中集成 Taotoken 并调用多模型 API 的实践
  • Excel-DNA:5分钟让您的Excel拥有.NET超能力!
  • TestDisk PhotoRec:免费开源数据恢复终极指南,快速找回丢失的分区和文件