Qt 串口类QSerialPort 使用笔记

2023-10-30

Qt 串口类QSerialPort 使用笔记

 

虽然现在大多数的家用PC机上已经不提供RS232接口了。但是由于RS232串口操作简单、通讯可靠,在工业领域中仍然有大量的应用。Qt以前的版本中,没有提供官方的对RS232串口的支持,编写串口程序很不方便。现在好了,在 Qt5.1 中提供了QtSerialPort模块,方便编程人员快速的开发应用串口的应用程序。 本文就简单的讲讲QtSerialPort模块的使用。

 

当前的QtSerialPort模块中提供了两个C++类,分别是QSerialPort QSerialPortInfo

QSerialPort 类提供了操作串口的各种接口。

QSerialPortInfo 是一个辅助类,可以提供计算机中可用串口的各种信息。

使用方法

先介绍 QSerialPortInfo 的使用。下面是一个简单的例子,用来列举出电脑上全部的串口设备。

首先,需要在pro文件中增加如下内容:

QT += serialport

 

Cpp 文件如下:

#include <QCoreApplication>
#include <QDebug>
 
#include <QSerialPort>
#include <QSerialPortInfo>
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        qDebug() << "Name : " << info.portName();
        qDebug() << "Description : " << info.description();
        qDebug() << "Manufacturer: " << info.manufacturer();
        qDebug() << "Serial Number: " << info.serialNumber();
        qDebug() << "System Location: " << info.systemLocation();
    }
    return a.exec();
}

在我的电脑上显示的结果如下:

Name :  "COM1"
Description :  "通信端口"
Manufacturer:  "(标准端口类型)"
Serial Number:  ""
System Location:  "\\.\COM1"
Name :  "COM5"
Description :  "USB Serial Port"
Manufacturer:  "FTDI"
Serial Number:  "A400G3UXA"
System Location:  "\\.\COM5"

通常,我们需要指定程序使用某一个确定的串口,这时不能只使用串口名称,因为USB串口每次插在不同的USB口上时获得的串口名称都可能有变化。这时可以利用串口的序列号,这个号码一般来说是唯一的,比如下面的代码,首先遍历所有的串口,找到我们需要的串口后就返回。

#include <QCoreApplication>
#include <QDebug>
#include <QSerialPort>
#include <QSerialPortInfo>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSerialPortInfo com_info;
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        if( info.serialNumber() == "A400G3UXA" )
        {
            com_info = info;
            break;
        }
    }
    qDebug() << "Name : " << com_info.portName();
    qDebug() << "Description : " << com_info.description();
    qDebug() << "serialNumber: " << com_info.serialNumber();
    return a.exec();
}

QSerialPort 负责具体的串口操作。选定串口后,要先打开串口,才能设置波特率等参数。这些参数都设置好了就可以使用了。最基本的操作无非是read() 和 write()。需要注意的是这两个操作都是非阻塞的。

另外有一个重要的signal 也需要用到,那就是 void QIODevice::readyRead()

每次串口收到数据后都会发出这个signal。我们的程序中需要定义一个slot,并将其与这个signal 相连接。这样,每次新数据到来后,我们就可以在slot中读取数据了。这时一定要将串口缓冲区中的数据全部读出来,可以利用readAll() 来实现。

下面的代码片段给出了设置串口的例子。

    m_reader.setPort(info);
    if(m_reader.open(QIODevice::ReadWrite))
    {
        qDebug() << "m_reader.open(QIODevice::ReadWrite)";
        m_reader.setBaudRate(QSerialPort::Baud9600);
        m_reader.setParity(QSerialPort::NoParity);
        m_reader.setDataBits(QSerialPort::Data8);
        m_reader.setStopBits(QSerialPort::OneStop);
        m_reader.setFlowControl(QSerialPort::NoFlowControl);

        m_reader.clearError();
        m_reader.clear();
        connect(&m_reader, SIGNAL(readyRead()), this, SLOT(readyReadSlot()));
}


void Dialog::readyReadSlot()
{
    qDebug() << "x";
    QByteArray arr = m_reader.readAll();
    do_something(arr);
}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 串口类QSerialPort 使用笔记 的相关文章

  • 海康rtsp抓包分析

    海康h264 rtp rtsp rtcp包分析 1 DESCRIBE rtsp 192 168 0 186 554 mpeg4 ch01 main av stream RTSP 1 0 CSeq 0 Accept application s
  • 计算机经典书籍2

    推荐度参考 6分 可看可不看 7分 值得一读 8分 经典好书 9分 强烈推荐 10分 神品级 C语言类 C程序设计语言 推荐度 8分 书籍简介 在计算机发展的历史上 没有哪一种程序设计语言像C语言这样应用广泛 本书原著即为C语言的设计者之一
  • 1896-2021历届奥运会奖牌榜(Python数据处理)

    阅读本文大约需要 3 分钟 摘 要 这两天在平台上看到一些创作者失去创作动力的感慨 OF只想说往事如昙花一现 我们都需要时刻静下心来 认真地考虑下自己的创作目标并付诸行动 遥想当年OF做软件系统的时候 开源社区还没有像现在这样健全 再看看如
  • 多模态交互的概念与现状

    一 多模态概念 所谓 模态 英文是modality 用通俗的话说 就是 感官 多模态即将多种感官融合 目前的人机智能交互比如语言控制不如屏幕控制那么精准 很多时候会误判指令和错误唤醒 比较语言充满了不确定性 再比如 语音交互的物联网设备还是
  • linux 网络编程socket

    前言 socket 套接字 是linux下进程间通信的一种方式 通常使用C S 客户端 服务端 的方式通信 它可以是同一主机下的不同进程间通信或者不同主机的进程通信 socket是夹在应用层和TCP UDP协议层间的软件抽象 向应用层开发人
  • (简单易记版)考研复试英语自我介绍

    Good morning teachers I am very glad to be able to attend this interview First let me introduce myself my name is xxx 24
  • 当出现raise NotImplementedError报错

    class LeNet5 nn Module def init self super LeNet5 self init 定义卷积层 self conv nn Sequential nn Conv2d in channels 1 out ch
  • 【FreeRTOS学习计划】 第八节 任务延时列表的实现

    在本节之前 为了实现任务的阻塞延时 在任务控制块中内置了一个延时变量xTicksToDelay 每当任务需要延时的时候 就初始化 xTicksToDelay 需要延时的时间 然后将任务挂起 这里的挂起只是将任务在优先级位图表 uxTopRe
  • 关于‘try-with-resources‘的问题

    开发中在使用读写流的时候会遇到一个问题 try 通过输入流读取文件内容 FileInputStream警告try with resources FileInputStream inputStream new FileInputStream
  • window.opener 的用法

    window opener 实际上就是通过window open打开的窗体的父窗体 比如在父窗体parentForm里面 通过 window open subForm html 那么在subform html中 window opener
  • 匹配算法,角点介绍

    https www zhangshengrong com p wrad8o2EaB Harris角点 以一点为中心 画一个窗口 让该窗口在该点周围移动 看灰度值是否有变化 有变化证明是角点 该cost可以表达为 2 2 2 2次函数可以看作
  • SynchroTrap-基于松散行为相似度的欺诈账户检测算法

    大家好 我是小伍哥 今天给大家分享一个非常牛逼的算法 叫做SynchroTrap 有问题可以加我一起交流 一 极致对抗下的风控怎么做 为了好理解 以淘宝刷单为例 各阶段为假设 本人并未做过刷单的风控 第一阶段 同设备 同地址 大量购买 第二
  • 软件设计师(十)网络与信息安全基础知识

    计算机网络是由多台计算机组成的系统 与传统的单机系统 多机系统相比有很大的区别 一 网络概述 计算机网络是计算机技术与通信技术相结合的产物 它实现了远程通信 远程信息处理和资源共享 1 计算机网络的概念 计算机网络的定义是利用通信设备和线路
  • 三种主流的Web服务实现方案(REST+SOAP+XML-RPC)简述及比较

    目前知道的三种主流的Web服务实现方案为 REST 表象化状态转变 软件架构风格 SOAP 简单对象访问协议 XML RPC 远程过程调用协议 下面分别作简单介绍 REST 表征状态转移 Representational State Tra
  • GIT本地代码处于detached HEAD的情况(又称游离状态)的解决办法

    有时候git由于一些操作的问题出现了detached HEAD 的情况 对于新手来说很焦急 但又不敢动 生怕搞错点什么把劳动成果付之东流 下面的解决办法要顺序执行 先 git commit 进行提交 提交完你的本地分支指向的是你刚commi
  • FM33G0XX-创建一个KEIL工程的步骤

    1 说明 本文章为 FM33G 系列低功耗 MCU 创建 keil 工程 FM33G0XX 系列是复旦微电子 公司开发的低功耗 MCU 芯片 2 创建一个 keil 工程的步骤 2 1 新建功能文件夹 这里我们建立一个文件夹为 Templa
  • Ethereum以太坊区块链底层换用国密算法实验报告

    区块链技术的基础是计算机密码学 可以说 没有计算机密码学 就没有区块链技术 区块链在如下方面用到了计算机密码学 验证签名 保证交易发起的真实性 用到了ECDSA 哈希校验区块完整性 保证不可篡改特性 用到了hash算法 以太坊中具体用到sh

随机推荐

  • 一个java文件中是否可以定义多个类

    title 一个java文件中是否可以定义多个类 date 2017 12 31 1 53 43 tags Java基础 基本概念 categories Java基础 一个java文件中可以定义多个类 但是最多只有一个类被public修饰
  • 如何在宝塔面板中使用小皮面板的数据库(mysql)

    1 关闭mysql service mysqld stop 2 查看是否有僵尸进程残留 ps ef grep mysqld 如果存在 则杀掉进程 kill quit 进程号 或者 kill 9 进程号 3 复制小皮面板的mysql 的 da
  • 一款新的网页设计工具,简单好用

    之前一直在找一些智能化的 简单操作的网页设计工具 后来发现这个VXPLO 还蛮好用的 使用地址http www vxplo cn VXPLO是互联网上出现的第一款基于云计算方式的交互式网页设计工具 也是一个互动作品分享平台 大家需要网页设计
  • 蓝桥杯:火星人(全排列模板) Java

    import java util ArrayList import java util Arrays import java util LinkedList import java util List import java util Sc
  • Python编程题

    1 输入直角三角形的两个直角边的长度a b 求斜边c的长度 from math import sqrt 从math库中导入sqrt方法 a eval input 输入直角边a的长度 b eval input 输入直角边b的长度 c sqrt
  • Python FastAPI上传文件至七牛云

    最近需要给博客添加上传图片的功能 之前有图片上传的 上传主题图片的 考虑到博客的话图片太多就不存到服务器了 存到七牛云上比较好 相关的图片服务也比较多 我的上传流程是 前端上传图片至服务器 服务器在上传到七牛云 我的后台使用的是Python
  • linux系统的宝塔面板密码忘记了?用户名忘记了?访问地址忘记了?安全入口忘记了?宝塔服务是否已开启?以下是解决方法!修改密码、修改用户名、修改访问端口、修改安全入口等等!

    宝塔面板 在Linux系统下 宝塔面板 BT Panel 可以帮助用户简化服务器的管理和配置 宝塔面板适用于多个Linux发行版 如CentOS Ubuntu等 并提供了图形化的界面 使得用户可以通过简单的点击和配置来完成各种操作 使用宝塔
  • VS2017 创建动态链接库并使用

    下面我们直接步入正题 1 首先在VS2017中新建Dll项目 2 组织你的项目工程目录如下 3 其中 MyDll h文件中的代码为 pragma once ifdef MY DLL EXPORTS define MY DLL EXP dec
  • redis打开若依前端出现端口错误无法显示验证码

    解决方案 由深到表 1 redis服务没有开 箭头朝下 2 redis cli没有开 箭头朝下 3 redis cli打开后报错及解决 我出现的问题是自己在这两个文件设置了密码 但是没有输入导致无法连接 可以去查下如何在文件内设置redis
  • paramiko的两种简单用法,sftp上传下载,执行服务器cmd

    注 1 安装paramiko之前需要安装pycrypto 2 需要服务端添加你的公钥权限你才能使用对应的私钥 1 上传下载文件 import paramiko privatekeyfile 私钥的地址 mykey paramiko RSAK
  • 软件测试综述-软件开发过程

    1 软件产品构成的主要部分 1 客户需求 2 产品说明书 3 进度表 4 软件设计文档 包括 结构文档 数据流图 状态转换图 流程图 代码注释等 5 测试文档 包括 测试计划 测试用例 缺陷报告 测试工具和自动测试 质量 统计和总结 2 软
  • POJ-1416 Shredding Company(DFS)

    题目链接 点击打开链接 大致题意 公司现在要发明一种新的碎纸机 要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值 比如 target的值是50 而纸条上的数字是12346 应该把数字切成四部分 分别是1 2 34 6 因为这
  • 推荐系统-基于用户的协同过滤(User-based CF)

    基于邻域的算法应该算是推荐系统中最基础的算法之一了 主要包括基于用户的协同过滤和基于物品的协同过滤 我觉得他们是最符合直觉的推荐算法了 你想想看 如果给你若干人的行为数据 你怎么去做推荐 一个就是找到和他最相似的用户 因为他们臭味相投 所以
  • SpringCloud之Eureka的报错(版本神坑)

    一 报错内容 2021 09 12 14 47 53 594 INFO 20640 freshExecutor 0 com netflix discovery DiscoveryClient Disable delta property f
  • springboot如何实现短信验证注册和短信验证码登录

    Spring Boot实现短信验证注册和短信验证码登录的步骤如下 1 集成短信服务 选择一个短信服务商 例如阿里云 腾讯云等 并集成该服务商提供的API 2 实现短信发送接口 编写一个短信发送的接口 该接口需要传入手机号并发送短信验证码到该
  • C#Socket通信基础方法知识整理

    一 IP地址操作类 1 IPAddress类 a 在该类中有一个 Parse 方法 可以把点分的十进制IP表示转化成IPAddress类 方法如下 IPAddress address IPAddress Parse 192 168 0 1
  • python sqlite3

    含数据库连接 表创建 增删改查 查看sqlite数据库的软件推荐使用sqlitestudio 下载地址 sqlitestudio SQLite文档类资源 CSDN下载 coding utf 8 乐乐感知学堂公众号 author https
  • SQL Server如何备份数据库

    一 首先把当前的数据库备份成一个文件 1 按照操作来 选择对应的数据库 确定备份文件的存储位置 点击确定 生成备份文件 2 然后可以通过该备份文件还原数据库 右键数据库点击还原文件和文件组 然后设置目标数据库的名字 如果数据库中已经存在相同
  • TSINGSEE青犀视频安防监控管理平台EasyNVR如何配置鉴权?

    视频监控汇聚平台EasyNVR是基于RTSP Onvif协议的视频平台 可支持将接入的视频流进行全平台 全终端的分发 分发的视频流包括RTSP RTMP HTTP FLV WS FLV HLS WebRTC等格式 为了满足用户的集成与二次开
  • Qt 串口类QSerialPort 使用笔记

    Qt 串口类QSerialPort 使用笔记 虽然现在大多数的家用PC机上已经不提供RS232接口了 但是由于RS232串口操作简单 通讯可靠 在工业领域中仍然有大量的应用 Qt以前的版本中 没有提供官方的对RS232串口的支持 编写串口程