【2020-05-04】QT5使用串口简单笔记
[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2020-05-04 标题QT5使用串口简单笔记分类编程 / C C / QT 标签qtQT5使用串口简单笔记项目引用信息查询串口读写: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】代码非常简单#includeQSerialPortInfovoidrefresh_serial(){QListQSerialPortInfoport_listQSerialPortInfo::availablePorts();for(intindex0;indexport_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#includeQSerialPortclassDemo_Serial_Port:publicQObject{Q_OBJECTpublic:Demo_Serial_Port();voidinit_uart(QStringport_name,intbaudrate);voidrelease_uart();/* block_time0: 不阻塞 block_time0: 阻塞时间block_time毫秒 */boolwrite_data(constQStringdata,unsignedintblock_time);/* read_timeout0: 不阻塞 read_timeout0: 阻塞时间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 */#includeDemo_Serial_Port.hDemo_Serial_Port::Demo_Serial_Port(){initedfalse;}voidDemo_Serial_Port::init_uart(QStringport_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_bytes0;initedtrue;}voidDemo_Serial_Port::release_uart(){if(inited!true)return;qDebug(Release Uart %s,qPrintable(serial_port.portName()));serial_port.close();written_bytes0;}boolDemo_Serial_Port::write_data(constQStringdata,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_bytes0;written_datadata.toLocal8Bit();written_data.append( );qint64 bytesWrittenserial_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_time0){if(serial_port.waitForBytesWritten(block_time)!true){qCritical(%s write Timeout:%d data:%s,qPrintable(serial_port.portName()),bytesWritten,qPrintable(data));returnfalse;}else{written_bytes0;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 readDataserial_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_bytesbytes;if(written_byteswritten_data.size()){// qDebug(%s write data:%s Finish, qPrintable(serial_port.portName()),written_data.data());written_bytes0;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 】里面有大量实例进入入口如下

相关新闻

PHP构建多智能体系统:从零实现舆情分析实战

PHP构建多智能体系统:从零实现舆情分析实战

最近几年,每当讨论起AI智能体、多智能体系统这类前沿技术,大家的第一反应往往是Python。TensorFlow、PyTorch、LangChain、AutoGen……这些生态几乎成了AI开发的“官方语言”。而PHP,这个曾经统治Web后端的“王者”,似乎被贴上了“…

2026/7/21 23:35:10阅读更多 →
5个步骤构建企业级网络配置备份系统:Oxidized实战指南

5个步骤构建企业级网络配置备份系统:Oxidized实战指南

5个步骤构建企业级网络配置备份系统:Oxidized实战指南 【免费下载链接】oxidized Oxidized is a network device configuration backup tool. Its a RANCID replacement! 项目地址: https://gitcode.com/GitHub_Trending/ox/oxidized 在网络运维的世界里&…

2026/7/21 23:35:10阅读更多 →
论文答辩还有3天AI率超标怎么办?嘎嘎降AI半天搞定,亲测知网过了

论文答辩还有3天AI率超标怎么办?嘎嘎降AI半天搞定,亲测知网过了

论文答辩前AI率超标,还有三天,能处理吗? 能。三天时间绰绰有余,真正花在降AI上的时间不超过半天。最快路径 今天(第一天): 打开 https://www.aigcleaner.com,注册,用1000…

2026/7/21 23:35:10阅读更多 →
深入解析C2000 Bootloader数据流与多模式引导实现

深入解析C2000 Bootloader数据流与多模式引导实现

1. 项目概述与核心价值在嵌入式系统开发中,我们常常会面对一个看似简单却至关重要的环节:系统如何从“一片空白”的状态,加载并运行我们精心编写的应用程序?这个问题的答案,就是引导加载程序,也就是我们常说…

2026/7/22 1:51:59阅读更多 →
微信公众号自动化发布实战:从Markdown到发布的完整流程

微信公众号自动化发布实战:从Markdown到发布的完整流程

1. 项目概述:Agent自动化发布公众号文章实战 在内容创作领域,公众号运营者每天都要面临重复性工作:撰写文章、排版设计、封面制作、最终发布。这个项目通过整合智语(Zhiyu)AI能力和baoyu-skills工具链,实现…

2026/7/22 1:51:59阅读更多 →
降AIGC黑科技!AI率92%暴降至5%!实测10款降AI率工具!免费降AIGC额度薅到爽!

降AIGC黑科技!AI率92%暴降至5%!实测10款降AI率工具!免费降AIGC额度薅到爽!

2026 年各大高校和期刊平台的 AI 检测系统又升级了,知网 AIGC、维普 AI、万方智能检测三大平台的算法迭代速度越来越快,上个月能蒙混过关的改写方式,这个月直接就会被标红预警。单纯的同义词替换、语序调整早就不管用了,想要有效降…

2026/7/22 1:51:59阅读更多 →
2026亲测10款降AI率平台红黑榜!优缺点全公开,达标率硬核对标行业天花板

2026亲测10款降AI率平台红黑榜!优缺点全公开,达标率硬核对标行业天花板

2026 年,AI 写稿、AI 生成内容已经成了学生党、打工人和内容创作者的日常,但随之而来的「AI 率过高」问题也成了新的麻烦:论文查重 AI 率超标、职场报告被判定 AI 生成、自媒体内容过不了平台原创审核… 为了帮大家解决这个痛点,我…

2026/7/22 1:51:59阅读更多 →
VirtualBox与Linux开发环境配置实战指南

VirtualBox与Linux开发环境配置实战指南

1. VirtualBox与Linux入门全景指南作为从业十年的Linux系统管理员,我见证了无数开发者卡在虚拟机环境配置的第一步。VirtualBox作为Oracle推出的开源虚拟化方案,凭借其轻量级、跨平台和免费特性,成为Linux学习的最佳拍档。不同于VMware的商业…

2026/7/22 1:51:59阅读更多 →
Golang与Cursor AI:提升后端开发效率的实践指南

Golang与Cursor AI:提升后端开发效率的实践指南

1. 项目概述Golang作为现代后端开发的主流语言,凭借其简洁语法和卓越性能赢得了开发者青睐。而Cursor这款AI驱动的编辑器,正在改变我们编写Go代码的方式。我最近用Cursor完成了一个电商后端服务的开发,整个过程比传统开发方式效率提升了至少4…

2026/7/22 1:49:59阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →