前言:

最近一段时间在做有关串口通讯的Qt项目,在ubuntu 和 window两个平台上都有接触。在这中秋佳节即将来临之际,也得空写点关于这方面的心得,算是一个记录笔记吧。

Qt官方有关串口类的介绍,说的很明白,Since: Qt5.1,从5.1版本才引进的QSerialPort 类。

那么要是qt5版本之前的平台要怎么写串口功能呢?

qt5之前

需要引入第三方qextserialport类,而这对于linux和window平台又有所不同。

官方地址:https://qextserialport.github.io/

下载地址:https://github.com/qextserialport/qextserialport

window平台:

在我们的项目中加入:

C文件qextserialbase.cpp         头文件qextserialbase.h

C文件qextserialport.cpp          头文件qextserialport.h,

C文件win_qextserialport.cpp   头文件win_qextserialport.h

使用时:

头文件声明类对象
QextSerialPort *myCom;

打开并配置串口,举例:

    //选择串口号QString portName = ui->PortNamecomboBox->currentText();myCom = new QextSerialPort(portName);//串口数据读取连接connect(myCom, SIGNAL(readyRead()), this, SLOT(ReadMyCom()));//设置波特率myCom->setBaudRate((BaudRateType)ui->BaudRatecomboBox->currentText().toInt());//设置数据位myCom->setDataBits((DataBitsType)ui->DataBitscomboBox->currentText().toInt());//设置校验位switch(ui->ParitycomboBox->currentIndex()){case 0:myCom->setParity(PAR_NONE);break;case 1:myCom->setParity(PAR_ODD);break;case 2:myCom->setParity(PAR_EVEN);break;default:myCom->setParity(PAR_NONE);qDebug("set to default : PAR_NONE");break;}//设置停止位switch(ui->StopBitscomboBox->currentIndex()){case 0:myCom->setStopBits(STOP_1);break;case 1:myCom->setStopBits(STOP_1_5);break;case 2:myCom->setStopBits(STOP_2);break;default:myCom->setStopBits(STOP_1);qDebug("set to default : STOP_1");break;}//设置数据流控制myCom->setFlowControl(FLOW_OFF);//设置延时myCom->setTimeout(TIME_OUT);//以可读写方式打开串口bool flag = myCom->open(QIODevice::ReadWrite);

Linux(ubuntu)平台:

稍有不同,需将win_qextserialport.cpp和win_qextserialport.h 换为 posix_qextserialport.cpp和posix_qextserialport.h。

用法类似。比如:

头文件声明:

Posix_QextSerialPort *myComA;

打开和配置串口:

#ifdef ARMmyComA = new Posix_QextSerialPort("/dev/ttymxc4", QextSerialBase::Polling);
#endif
#ifndef ARMmyComA = new Posix_QextSerialPort("/dev/ttyUSB1", QextSerialBase::Polling);
#endifif(!myComA->open(QIODevice::ReadWrite)){qDebug()<<"Warning : serialPortA open failed.";}elseqDebug()<<"Open serialPortA success!";myComA->setBaudRate(BAUD57600);
//    myComA->setBaudRate(BAUD115200);myComA->setDataBits(DATA_8);myComA->setParity(PAR_NONE);myComA->setStopBits(STOP_1);myComA->setFlowControl(FLOW_OFF);myComA->setTimeout(10);

这里的条件编译是方便我在ubuntu桌面平台和ARM嵌入式板端调试,请忽略。

探讨两个平台不同之处:

1.两种轮询模式:

window平台下支持:QextSerialPort::Polling //异步读写   和   QextSerialPort::EventDriven //同步读写(接受到数据即读取)

linux平台下只支持: QextSerialPort::Polling //异步读写(需要开定时器读取)

2. 支持的波特率不同:

更多详情请查看:https://qextserialport.github.io/1.2/qextserialport.html#details

qt5之后

Qt官方引入了QSerialPort类,然后使用serialport时就方便多了,一般包括以下几个步骤:

1. 项目文件.pro,加入serialport模块:

QT += serialport

2. 自定义类头文件,按自身需求加入官方库,如:

#include <QSerialPort>
#include <QSerialPortInfo>

3. 使用时:

先头文件申明类对象:

QSerialPort *m_serialPort;

后打开和配置串口:

    m_serialPort = new QSerialPort("COM3");if(!m_serialPort->open(QIODevice::ReadWrite))//ReadWrite 模式{qDebug()<<"打开失败!";return;}elseqDebug()<<"打开串口成功!";m_serialPort->setBaudRate(QSerialPort::Baud115200,QSerialPort::AllDirections);m_serialPort->setDataBits(QSerialPort::Data8);             //数据位为8m_serialPort->setFlowControl(QSerialPort::NoFlowControl);  //无流控制m_serialPort->setParity(QSerialPort::NoParity);           //无校验位m_serialPort->setStopBits(QSerialPort::OneStop);           //停止位1

以上仅是个人对qt中串口使用的大概了解,各位有补充的欢迎留言指导及斧正,谢谢大家,预祝大家中秋佳节快乐。

Qt 谈一谈串口serialport相关推荐

  1. Qt下实现多线程串口通信

    Qt下实现多线程串口通信 Qt下无论是RS232.RS422.RS485的串口通信都可以使用统一的编码实现.本文把每路串口的通信各放在一个线程中,使用movetoThread的方式实现. 用Seria ...

  2. qt 串口粘包_用Qt 5写一个串口收发桌面工具

    今天用Qt写了一个串口收发工具,记录下整个流程. 1.项目工程布局 2.ui文件布局 3.widget.h文件 #ifndef WIDGET_H #define WIDGET_H #include # ...

  3. 从一张图开始,谈一谈.NET Core和前后端技术的演进之路

    从一张图开始,谈一谈.NET Core和前后端技术的演进之路 邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和 ...

  4. 谈一谈浏览器解析CSS选择器的过程【前端每日一题-6】

    谈一谈浏览器解析CSS选择器的过程? 这是一道发散题,可以根据自己的理解自行解答. 在开始前,我们必须了解一个真相:为什么排版引擎解析 CSS 选择器时一定要从右往左解析? 简单的来说:浏览器从右到左 ...

  5. 有一群200w年薪的朋友是什么感觉?谈一谈入学中国科学院大学的几点感受吧

    我叫阿广,偶尔正经,偶尔逗比,97年生人,在求学期间当过鸡头鸡尾,当过凤尾没当过凤头.大家如果想深入了解我,可以查看本公众号的原创文章. 技术人光有技术走不长久,所以今天不更新技术文章了,也给大家谈一 ...

  6. 【建站系列教程】5、谈一谈网站的静态化

    [建站系列教程]5.谈一谈网站的静态化[进阶] 动态页面?静态页面?伪静态页面? 三个页面有何优缺点? 为什么要让网页静态化 如何网页伪静态化? 写在前面:大家好,我是热爱编程的小泽. [建站系列教程 ...

  7. 谈一谈周公所理解的面试

    因为公司最近招聘的力度很大,所以最近公司的面试很多,加之很多同事项目紧,所以让我参加了一些技术面试.不论是作为面试官还是应聘者,参加工作以来我参与的面试的次数我自己也记不清了,所以在此想从面试官和应聘 ...

  8. 我从阿里面试回来,想和Java程序猿谈一谈

    最近小编看了一篇关于面试的文章,题目是"我从阿里面试回来,想和Java程序员谈一谈",内容不是讲面试前刷题,而是更加聚焦在面试前如何准备,以及工作当中如何学习.感觉总结的很不错,今 ...

  9. 怎么学python-结合学习经历,谈一谈如何学习Python

    结合自己的学习经历,谈一谈如何学习Python吧. 入门阶段 Python其实语言本身已经很接近自然语言了,所以入门其实并不麻烦.如果你是从未接触过编程的萌新,给你推荐一门Udacity CS101, ...

  10. 先查询再插入的存储过程怎么写_谈一谈 InnoDB(1) - 底层存储文件结构

    看技术文章是不是很累呢, 这次来个轻松点的~来谈一谈MySQL最主流的数据库引擎 InnoDB 吧~ 序 老王走进一号会议室, 随手打开了灯, 小张紧随其后 "王哥, 找我来干啥啊" ...

最新文章

  1. matlab为曲线下面积上色
  2. mpc5774时钟监控寄存器_单片机如何才能不死机之内外部时钟
  3. node模块函数图解
  4. Illumina联手IBM Watson Health解读癌症基因谱
  5. 静态初始化中不能放入繁重计算,否则会变慢!
  6. Java实现微信刷屏(2)
  7. ECS Windows 系统蓝屏 (BSOD) 以及停止响应 (Hang) 的处理
  8. 计算机毕业设计android的酒店客房预订客户端app(源码+系统+mysql数据库+Lw文档)
  9. html5+开启摄像头,双摄像头时如何通过html5选择打开哪个摄像头_沃航科技
  10. 高德地图各种摄像头图标_汽车导航怎么看?高德地图各种符号图标图解大全
  11. 【哲理】你的上限是什么?如何打破上限?-莫安迪
  12. Web前端学习笔记——JavaScript之面向对象游戏案例:贪吃蛇
  13. 安卓手机投屏软件_手机投屏软件哪个好?推荐这五款投屏神器
  14. 开启xmp1还是2_英雄联盟手游高帧率模式怎么开启-高帧率模式开启方法
  15. 计算机中分页符号是什么,2013年职称计算机操Word2003精选知识点:分页符号
  16. rplidar连接计算机显示process has died.....解决方法
  17. 关于Paxos的历史
  18. java静态成员和非静态成员的区别
  19. IntelliJ IDEA优化
  20. 过滤器实现单一用户登录

热门文章

  1. 关于3G手机USIM卡的电话簿
  2. 网络安全实训记录(2020.7.15-2020.7.19)
  3. (一)GNURadio3.9 安装教程
  4. HTML5新标签有哪些呢?
  5. 加工中心如何对刀步骤详解,会这六步妈妈再也不担心不会对刀了
  6. 2017秦皇岛CCPC E - String of CCPC
  7. U5 CentOS系统的U盘启动与安装-孙宇彤-专题视频课程
  8. cpu 占用过高排查流程
  9. 苹果发布代表全球各地的 22 个国家的Apple Watch表带和表盘
  10. 记录一次公司生产服务器被前端程序猿 rm -rf /的血泪恢复史