QT串口收发

这篇具有很好参考价值的文章主要介绍了QT串口收发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

串口扫描

将串口模块添加到工程中
在.pro文件中添加serialport
qt串口通信的接收与发送,qt,开发语言,c++
用到的头文件:

#include <QSerialPortInfo>
#include <QSerialPort>

QSerialPort类提供访问串口的功能,还可以通过QSerialPortInfo类获取可用串口的信息。
QSerialPortInfo类允许枚举系统中所有串口的信息,包括串口名称、系统位置、描述和制造商。
QSerialPortInfo::availablePorts();返回系统上可用串口的列表。


foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
			//这里只是临时读取可用串口不要在堆区直接开辟空间
	        QSerialPort port;
	        port.setPort(info);
	        //以可读可写的方式打开(临时打开,扫描可用串口)
	        if(port.open(QIODevice::ReadWrite))
	        {
	            //将扫描到的可用串口写入到comboBox里
	            ui->comboBox->addItem(port.portName());
	            //关闭串口
	            port.close();
	        }
}
foreach(variable, container)”可以看到,foreach有两个参数:
container:容器,即被遍历的对象
variable:当前元素,即遍历container过程中,当前的那个元素

qt串口通信的接收与发送,qt,开发语言,c++
声明QSerialPort成员变量
定义指针变量,用来承接在堆区开辟的对象,使之在全局范围内可用
qt串口通信的接收与发送,qt,开发语言,c++
在主窗口中实例化串口对象,和对可用串口进行扫描
qt串口通信的接收与发送,qt,开发语言,c++

配置串口信息

通过QSerialPort类型定义的串口对象 对串口参数设置
配置信息主要是在串口打开时设置的,所以我们可以设置在串口打开按钮槽函数里面

设置串口名称

void QSerialPort::setPortName(const QString &name)

//ui->comboBox->currentText()//是comboBox当前的文本内容
m_port->setPortName(ui->comboBox->currentText());

设置波特率

setBaudRate(qint32 baudRate, Directions directions = AllDirections)
baudRate:为int类型  的波特率
    m_port->setBaudRate(ui->comboBox_2->currentText().toInt());
    //ui->comboBox_2->currentText().toInt()//将comboBox_2当前文本内容转换为int

qt串口通信的接收与发送,qt,开发语言,c++

设置数据位

setDataBits(DataBits dataBits)

DataBits的类型为:
qt串口通信的接收与发送,qt,开发语言,c++

//comboBox_4数据位comboBox
        //设置数据位
        switch (ui->comboBox_4->currentText().toInt())
        {
        case 8:
            m_port->setDataBits(QSerialPort::Data8);

            break;
        case 7:
            m_port->setDataBits(QSerialPort::Data7);
            break;
        case 6:
            m_port->setDataBits(QSerialPort::Data6);
            break;
        case 5:
            m_port->setDataBits(QSerialPort::Data5);
            break;
        }

qt串口通信的接收与发送,qt,开发语言,c++

设置奇偶校验

在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。

bool setParity(Parity parity)

qt串口通信的接收与发送,qt,开发语言,c++

        if(ui->comboBox_5->currentText() == tr("无"))
            m_port->setParity(QSerialPort::NoParity);
        else if(ui->comboBox_5->currentText() == tr("奇校验"))
            m_port->setParity(QSerialPort::EvenParity);
        else if(ui->comboBox_5->currentText() == tr("偶校验"))
            m_port->setParity(QSerialPort::OddParity);
        else if(ui->comboBox_5->currentText() == tr("空格"))
            m_port->setParity(QSerialPort::SpaceParity);
        else if(ui->comboBox_5->currentText() == tr("标记"))
            m_port->setParity(QSerialPort::MarkParity);

qt串口通信的接收与发送,qt,开发语言,c++

设置停止位

bool  setStopBits(StopBits stopBits)

qt串口通信的接收与发送,qt,开发语言,c++

        if(ui->comboBox_3->currentText() == tr("1"))
            m_port->setStopBits(QSerialPort::OneStop);
        else if(ui->comboBox_3->currentText() == tr("1.5"))
            m_port->setStopBits(QSerialPort::OneAndHalfStop);
        else if(ui->comboBox_3->currentText() == tr("2"))
            m_port->setStopBits(QSerialPort::TwoStop);

qt串口通信的接收与发送,qt,开发语言,c++

设置流控制

bool setFlowControl(FlowControl flowControl)

qt串口通信的接收与发送,qt,开发语言,c++

        m_port->setFlowControl(QSerialPort::NoFlowControl);		//设置为无流控制

设置读取数据的缓存大小

它的大小决定了串口收到数据后可以缓存的数据的大小,如果长时间不将数据从缓冲区取出来,会出现溢出丢数据的情况。所以这个缓存的大小可以根据实际的通信速度和数据量进行设置。

        m_port->setReadBufferSize(40960);

打开串口

ReadWrite//可读可写
m_serialPort->open(QIODevice)

参数可以设置串口为只读、只写、读写三种方式。

串口打开并配置代码

这一过程我主要在串口打开按钮槽函数完成的

    m_port->setBaudRate(ui->comboBox_2->currentText().toInt());//设置波特率
    m_port->setPortName(ui->comboBox->currentText());
    if(m_port->open(QIODevice::ReadWrite))
    {
        //设置数据位
        switch (ui->comboBox_4->currentText().toInt())
        {
        case 8:
            m_port->setDataBits(QSerialPort::Data8);

            break;
        case 7:
            m_port->setDataBits(QSerialPort::Data7);
            break;
        case 6:
            m_port->setDataBits(QSerialPort::Data6);
            break;
        case 5:
            m_port->setDataBits(QSerialPort::Data5);
            break;
        }
        //设置停止位
        if(ui->comboBox_3->currentText() == tr("1"))
            m_port->setStopBits(QSerialPort::OneStop);
        else if(ui->comboBox_3->currentText() == tr("1.5"))
            m_port->setStopBits(QSerialPort::OneAndHalfStop);
        else if(ui->comboBox_3->currentText() == tr("2"))
            m_port->setStopBits(QSerialPort::TwoStop);
        //设置校验位
        if(ui->comboBox_5->currentText() == tr("无"))
            m_port->setParity(QSerialPort::NoParity);
        else if(ui->comboBox_5->currentText() == tr("奇校验"))
            m_port->setParity(QSerialPort::EvenParity);
        else if(ui->comboBox_5->currentText() == tr("偶校验"))
            m_port->setParity(QSerialPort::OddParity);
        else if(ui->comboBox_5->currentText() == tr("空格"))
            m_port->setParity(QSerialPort::SpaceParity);
        else if(ui->comboBox_5->currentText() == tr("标记"))
            m_port->setParity(QSerialPort::MarkParity);
        offAndOn(false);
        m_port->setFlowControl(QSerialPort::NoFlowControl);		//设置为无流控制
        m_port->setReadBufferSize(40960);
    }
    else {
       qDebug() << "串口打开失败";
    }

串口接收数据

串口接收数据 是通过信号readyRead信号,接收串口数据

信号:readyRead信号
//设置串口监听
    connect(m_port,SIGNAL(readyRead()),this,SLOT(ReadData()));
//ReadData()  //该槽函数需要用户自己完成

设置接收监听
qt串口通信的接收与发送,qt,开发语言,c++
qt串口通信的接收与发送,qt,开发语言,c++
checkBox为:
qt串口通信的接收与发送,qt,开发语言,c++
textEdit为
qt串口通信的接收与发送,qt,开发语言,c++

void Widget::ReadData()
{
    //关闭串口
    QByteArray arr;
    //判断串口接收方式
    if(ui->checkBox->checkState())
    {
        arr = m_port->readAll().toHex();//将数据转换成16进制
    }
    else
    {
       arr = m_port->readAll();
    }
    ui->textEdit->append(arr);//将数据打印到textEdit
}

串口发送数据

textEdit_2为:
qt串口通信的接收与发送,qt,开发语言,c++
checkBox_2为:
qt串口通信的接收与发送,qt,开发语言,c++
checkBox_3为:
qt串口通信的接收与发送,qt,开发语言,c++

    QByteArray Data_1;
    //获取输入窗口sendData的数据
    QString Data = ui->textEdit_2->toPlainText();
    if(ui->checkBox_3->checkState())
    {
        Data+='\r';Data+='\n';
    }
    if(ui->checkBox_2->checkState())
    {
        Data_1 = QByteArray::fromHex(Data.toLatin1().data());//按十六进制编码发送
    }
    else
    {
        Data_1 = Data.toUtf8();//转换成utf8格式的字节流发送
    }

    // 写入发送缓存区
    m_port->write(Data_1);

串口关闭

关闭应写在关闭槽函数中

    m_port->close();
    offAndOn(true);//自定义函数,

offAndOn自定义函数,使comboBox不可再选

void Widget::offAndOn(bool status)
{
    ui->comboBox->setEnabled(status);
    ui->comboBox_2->setEnabled(status);
    ui->comboBox_3->setEnabled(status);
    ui->comboBox_4 ->setEnabled(status);
    ui->comboBox_5 ->setEnabled(status);
}
status false不可选   true可选

ui->comboBox->clear();  //清空comboBox

源码:

链接:https://pan.baidu.com/s/1zgz6evCmnVrMW0CzBcjkYQ?pwd=2178
提取码:2178文章来源地址https://www.toymoban.com/news/detail-739866.html

到了这里,关于QT串口收发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Visual Studio】报错 ASSERT: “i >= 0 && i < size()“,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 这个 Bug 是我做这个工程时遇到的:【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面。 使用 C++ 语言,配合 Qt 开发串口通信界面,在调试动态绘图

    2024年02月11日
    浏览(41)
  • 【Qt上位机与STM32进行串口通信】-2-Qt串口开发

    系列文章目标:Qt上位机与STM32进行串口通信,控制多个LED的状态。 本篇文章的主要目标: 1、设计两个界面,串口连接界面、控制界面。 2、只有在串口连接成功才能打开控制界面。 3、打开控制界面时,串口保持连接。 4、自定义控件,提升开发效率。 以下是我入门Qt的视频

    2024年02月06日
    浏览(43)
  • 关于Qt用多线程实现usb温度传感器(串口通信)的数据接收中遇到的问题及猜想(不一定正确)

    由于是初学,仅仅对串口编程有个了解,大概的功能是通过两个按钮实现串口数据的接收和暂停,其他的功能暂不深入研究。 通过串口调试助手发现,该串口的属性设置如左所示,接收的数据转为字符串后显示格式如右所示。这里是打算将右边的温度显示在一个LCD控件中,效

    2024年02月01日
    浏览(30)
  • QT串口收发

    将串口模块添加到工程中 在.pro文件中添加serialport 用到的头文件: QSerialPort类提供访问串口的功能,还可以通过QSerialPortInfo类获取可用串口的信息。 QSerialPortInfo类允许枚举系统中所有串口的信息,包括串口名称、系统位置、描述和制造商。 QSerialPortInfo::availablePorts();返回系

    2024年02月06日
    浏览(30)
  • Qt 串口收发数据

    首先,QT5是自带QSerialPort这个类的,使用时需要在pro文件里面添加一行: 然后直接引用头文件就可以使用了。 QSerialPort:提供访问串口的功能 QSerialPortInfo:提供系统中存在的串口的信息 接下来需要创建一个QSerialPort的对象,对串口的名称、波特率、数据位、校验位、停止位等

    2024年02月16日
    浏览(21)
  • 串口通信-发送和接收数据

    目录 通信方式 硬件电路 软件部分 USART外设(同步/异步收发器) 波特率 引脚复用 初始化基本流程 发送 接收 语言简述 常用的函数 使用的结构体 引脚模式 打印数据的三种方法 使用printf 在实际的串口中,只能发送二进制数,也就是十六进制的最直接数据。如果想发送字符,

    2024年02月12日
    浏览(38)
  • QT串口调试助手开发教程:上位机接收数据解析数据帧+多通道波形显示+数据保存

    在该设计中主要需要解决的问题就是接收单片机采集到的数据并在上位机将数字实时的通过波形显示出来,然后上位机要有保存下数据文件的功能,便于后续的软件读取数据做进一步的分析处理。有些人吃相难看,无底线,无道德,鉴于串口上位机会被广泛使用,撰写该教程

    2024年02月07日
    浏览(37)
  • [Qt开发]一口气搞懂串口通信

    🐊🐊🐊🐊🐊好多小鳄鱼 Qt的确有自己的串口通信类,就是QSerialPort,但是我们在使用过程中因为要更加定制化的使用串口通信类减小开发的难度,所以我们会提供一个串口通信类,也就是这个SerialPortHelper类。 首先我们要知道什么是串口,串口通信就是机器和系统之间的一

    2024年02月08日
    浏览(36)
  • Qt 5. QSerialPort串口收发

    1. 代码 2.效果 RX-TX短接

    2024年02月14日
    浏览(24)
  • STM32-串口通信(串口的接收和发送)

    本文在于记录自己的学习过程中遇到的问题和总结,各种情况下串口通信在STM32的实际使用方面占有很大的比重,本文主要对 串口通信 做一个简要的总结。 在STM32里,串口通信是USART,STM32可以通过串口和其他设备进行传输 并行数据 ,是 全双工 , 异步时钟控制 ,设备之间是

    2024年02月03日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包