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

【2020-05-04】QT5使用串口简单笔记

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2020-05-04| 标题:QT5使用串口简单笔记分类:编程 / C && C++ / QT |标签:qt


QT5使用串口简单笔记

    • 项目引用:
    • 信息查询:
    • 串口读写:
    • QT官方实例:

最近重新拾起来了QT编程,这里简单的笔记下如何使用QT的串口功能。

QT除了可以跨平台之外,它的文档和DEMO也写的非常优秀。串口的文档网址【 https://doc.qt.io/qt-5/qtserialport-index.html 】

从文档中可以看到,QT对于串口有2个操作类,一个是信息查询类,一个是串口读写类。

这里分别简单笔记下:

项目引用:

参考文档,可以看到,使用串口需要增加module,如下图:

信息查询:

API【 https://doc.qt.io/qt-5/qserialportinfo.html】,代码非常简单:

#include<QSerialPortInfo>voidrefresh_serial(){QList<QSerialPortInfo>port_list=QSerialPortInfo::availablePorts();for(intindex=0;index<port_list.size();index++){qDebug("Find Port:%s %s %s %s %s %s",qPrintable(port_list.description()),qPrintable(port_list.manufacturer()),qPrintable(port_list.portName()),qPrintable(port_list.serialNumber()),qPrintable(port_list.systemLocation()));}}

输出信息类似如下:

Find Port:Silicon Labs CP210x USB to UART Bridge Silicon Labs COM4 0001 \\.\COM4 H?????

这里需要注意的是我们使用【portName】 来进行串口读写操作。

串口读写:

API【 https://doc.qt.io/qt-5/qserialport.html 】

QT串口读写API非常简单,支持同步/异步读写,支持配置各种串口选项。这里只笔记一个最简单的DEMO:

/* demo_serial_port.h */#ifndefDEMO_SERIAL_PORT_H#defineDEMO_SERIAL_PORT_H#include<QSerialPort>classDemo_Serial_Port:publicQObject{Q_OBJECTpublic:Demo_Serial_Port();voidinit_uart(QString&port_name,intbaudrate);voidrelease_uart();/* block_time==0: 不阻塞 block_time>0: 阻塞时间:block_time毫秒 */boolwrite_data(constQString&data,unsignedintblock_time);/* read_timeout==0: 不阻塞 read_timeout>0: 阻塞时间:read_timeout毫秒 */QStringread_data(unsignedintread_timeout);signals:voidon_write_finished(Demo_Serial_Port*port);voidon_read_ready(Demo_Serial_Port*port);privateslots:voidhandleReadyRead();voidhandleBytesWritten(qint64 bytes);voidhandleError(QSerialPort::SerialPortError error);private:QSerialPort serial_port;QByteArray written_data;qint64 written_bytes;boolinited;};#endif// DEMO_SERIAL_PORT_H//==================================================================/* demo_serial_port.cpp */#include"Demo_Serial_Port.h"Demo_Serial_Port::Demo_Serial_Port(){inited=false;}voidDemo_Serial_Port::init_uart(QString&port_name,intbaudrate){if(inited!=false)return;qDebug("Init Uart <%s>:%d",qPrintable(port_name),baudrate);serial_port.setPortName(port_name);serial_port.setBaudRate(baudrate);serial_port.setDataBits(QSerialPort::Data8);serial_port.setStopBits(QSerialPort::OneStop);serial_port.setParity(QSerialPort::NoParity);serial_port.setFlowControl(QSerialPort::NoFlowControl);connect(&serial_port,&QSerialPort::readyRead,this,&Demo_Serial_Port::handleReadyRead);connect(&serial_port,&QSerialPort::errorOccurred,this,&Demo_Serial_Port::handleError);connect(&serial_port,&QSerialPort::bytesWritten,this,&Demo_Serial_Port::handleBytesWritten);serial_port.open(QIODevice::ReadWrite);written_bytes=0;inited=true;}voidDemo_Serial_Port::release_uart(){if(inited!=true)return;qDebug("Release Uart <%s>",qPrintable(serial_port.portName()));serial_port.close();written_bytes=0;}boolDemo_Serial_Port::write_data(constQString&data,unsignedintblock_time){if(inited!=true)returnfalse;if(written_bytes!=0){qCritical("<%s> last written not finish %d",qPrintable(serial_port.portName()),written_bytes);returnfalse;}written_bytes=0;written_data=data.toLocal8Bit();written_data.append(' ');qint64 bytesWritten=serial_port.write(written_data);if((bytesWritten==-1)||(bytesWritten!=written_data.size())){qCritical("<%s> write Err:%d data:%s",qPrintable(serial_port.portName()),bytesWritten,qPrintable(data));returnfalse;}if(block_time>0){if(serial_port.waitForBytesWritten(block_time)!=true){qCritical("<%s> write Timeout:%d data:%s",qPrintable(serial_port.portName()),bytesWritten,qPrintable(data));returnfalse;}else{written_bytes=0;qDebug("<%s> write data:<%s> Finish",qPrintable(serial_port.portName()),written_data.data());returntrue;}}else{returntrue;}}QStringDemo_Serial_Port::read_data(unsignedintread_timeout){if(inited!=true)returnQString("");QByteArray readData=serial_port.readAll();if(read_timeout!=0){if(serial_port.waitForReadyRead(read_timeout)==true){readData.append(serial_port.readAll());}else{qCritical("<%s> read Timeout:%d",qPrintable(serial_port.portName()),read_timeout);}}qDebug("<%s> read data:<%s> Success",qPrintable(serial_port.portName()),readData.data());returnQString(readData);}voidDemo_Serial_Port::handleReadyRead(){emiton_read_ready(this);}voidDemo_Serial_Port::handleBytesWritten(qint64 bytes){written_bytes+=bytes;if(written_bytes==written_data.size()){// qDebug("<%s> write data:%s Finish", qPrintable(serial_port.portName()),written_data.data());written_bytes=0;emiton_write_finished(this);}}voidDemo_Serial_Port::handleError(QSerialPort::SerialPortError error){qCritical("<%s> err<%d>:%s",qPrintable(serial_port.portName()),error,qPrintable(serial_port.errorString()));}

QT官方实例:

参考【 https://doc.qt.io/qt-5/qtserialport-examples.html 】,里面有大量实例,进入入口如下:

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

相关文章:

  • 被语句坑到差点离职!我用openGauss AI调优+Java动态CTE,把2分钟的报表干到了200毫秒 [特殊字符]
  • 教育前端智能化实践:从 AI 批改到自适应学习路径的落地路线
  • Unity Sprite与Texture深度解析:从基础概念到性能优化实战指南
  • 从HuggingFace论文到实际应用:模型选型的工程化决策树
  • 【硕博毕业必看】2026 高录用 EI 学术会议一览 | 毕业/职称优选:Scopus学术会议清单速览 | 8月会议合集|高录用、易发表、稳检索 | 计算机、人工智能、大数据、网络与通信类EI会议推荐
  • 证券交易系统的AIOps实时监控:毫秒级延迟要求下的异常检测与自动止损机制设计
  • 小米米家充气宝国产化拆解与技术分析
  • C++ 3D游戏开发:构建高质量项目文档的架构与工程实践
  • C语言相关基础内容(part1)(基于:C程序设计语言,KR)
  • PLC工程师进阶:突破指令思维掌握工业通信与混合开发
  • 羽毛球智能训练系统:从手工标注到 AI 多模态分析的创业技术复盘
  • 2026年成都办公家具性价比高的推荐指南 - 谁都没有我好看
  • 树结构算法:核心价值与高频解题模板
  • 跨平台文件传输工具LocalSend评测与配置指南
  • Diffusion Transformer (DiT) 架构深度解析:从 U-Net 替换到 AdaLN-Zero 条件调制的下一代扩散模型主干网络演进
  • 存储式测斜仪的设计与应用:从MEMS传感器到工程监测
  • 查重1%查重过了但知网AI率还40%?降AI≠降重,这篇教你彻底解决
  • 2026年成都办公家具性价比高的**单 - 谁都没有我好看
  • 苏州工厂上位机怎么选?2026本地服务商实力拆解与避坑要点 - 米諾
  • 2026年临沂短视频公司哪家好:最新专业测评推荐 - 米諾
  • YOLOv8改进策略【Conv和Transformer】| CVPR2025 CATANet LRSA局部区域自注意力 重叠分块交互 + 共享多头权重,精细复原图像纹理细节
  • ADC药物技术解析与市场趋势
  • SpringBoot协同过滤推荐系统实战:从环境搭建到算法调优
  • 有没有一键转换腾讯元宝到 Word 的工具?试试 AI 导出鸭,一键抓取腾讯元宝对话,自动规整格式导出标准 Word 文件
  • 【EU thetis_MRV网站之额外篇-Ice Class】
  • 行业AIOps能力的差异化设计:金融、电商、游戏与物联网四大行业的运维AI个性化策略
  • Unity游戏实时翻译框架XUnity.AutoTranslator:原理、部署与优化指南
  • 權威核驗!2026年7月浪琴香港官方售後網點地址及客戶服務熱線公示 - 浪琴服务中心
  • 【Bug已解决】GRPOTrainer environment_factory / tools is broken for VLMs whose tools return images 解决方案
  • 企业Agent落地惨败?别怪模型太弱