QT实现简易串口助手
简易串口助手界面设计#
自定义了QWidget的派生类SerialPortWidget,其界面设计大致如下:

效果图:

项目结构#
serial_port
└─│ main.cpp //主程序
│ mainwindow.cpp //主窗口源文件和头文件
│ mainwindow.h
│ myintvalidator.cpp //QIntValidator的派生类,重写fixup()
│ myintvalidator.h
│ mysetting.json
│ res.qrc //资源文件,添加css、图片文件
│ serialportwidget.cpp //QWidget的派生类,在其中串口的读写
│ serialportwidget.h
│ serial_port.pro //工程文件
│ serial_port.pro.user
│ setting.json //程序自动创建用于保存各种设置
│
├─image //存放图片
│ closebtn.png
│ closebtn2.png
│ openbtn.png
| logo.ico
| windowicon.png
│
└─style //存放qss/css文件
mystyle.css
使用json文件保存参数,比如某个复选框是否被勾上,是否显示时间,文本浏览器背景色等等,有关json文件的读写,这篇博客写的不错:https://blog.csdn.net/cpp_learner/article/details/118421096
部分代码#
串口助手的核心部分就是串行通信。
QSerialPort类#
QSerialPort提供了一些函数去访问串口。
Provides functions to access serial ports.
获取串口名#
QSerialPortInfo类可以获取已存在串口的信息:串口描述、串口名、制造商、串口序列号等。使用静态函数QSerialPortInfo::availablePorts()
获取所有的串口信息,再通过foreach遍历每个串口的信息。
Provides information about existing serial ports.
Use the static functions to generate a list of QSerialPortInfo objects. Each QSerialPortInfo object in the list represents a single serial port and can be queried for the port name, system location, description, and manufacturer. The QSerialPortInfo class can also be used as an input parameter for the setPort() method of the QSerialPort class.
//获取串口信息
QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
for (const QSerialPortInfo &info : infos) //foreach遍历串口信息
serialPortComboBox->addItem(info.portName()); //获取串口名
从串口读取数据#
SerialPortWidget::SerialPortWidget(QWidget *parent) : QWidget(parent)
{
...
QSerialPort *serialport = new QSerialPort;
//串口参数的设置,具体的值参照QT官方的文档
serialport->setPortName(portName); //设置串口名
serialport->setBaudRate(b); //设置波特率
serialport->setDataBits(databits); //设置数据位
serialport->setStopBits(stopbits); //设置停止位
serialport->setParity(parity); //设置校验位
//读数据还需使用信号与槽机制
/* 当有数据发送到串口时,串口设备会发出readyRead信号 */
connect(serialport, &QSerialPort::readyRead, this, &SerialPortWidget::readData);
...
}
/* 读串口数据 */
void SerialPortWidget::readData()
{
if(!serialport->open(QIODevice::ReadOnly)) //只读方式打开文件失败
{
qWarning() << "open serial port error";
return;
}
QByteArray data = serialport.readAll(); //以字节的方式读取数据
}
向串口写数据#
if(!serialport->open(QIODevice::WriteOnly)) //只写方式打开文件失败
{
qWarning() << "open serial port error";
return;
}
QByteArray data("hello");
serialport.write(data); //向串口写数据,需要先设置相关的参数
关闭串口#
serialport.close();
项目打包成exe#
见另一篇博客:https://www.cnblogs.com/qianxiaohan/p/18237089
测试结果#
使用Virtual Serial Port Driver添加一对虚拟串口,COM2 <==> COM3。

自制的简易串口助手选择COM2,另一个串口助手选择COM3,以此来测试自制的简易串口助手。可以看到简易串口助手可以正常地实现数据的收发。
项目地址:https://github.com/qianxiaohan/QTProject/tree/main/serial_port
作者:qianxiaohan
出处:https://www.cnblogs.com/qianxiaohan/p/18266015
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2022-06-24 Python爬取ajax加载的内容