首页 > 其他分享 >qt通信:串口通信

qt通信:串口通信

时间:2025-01-15 11:23:10浏览次数:1  
标签:qt void QSerialPort 通信 serialport ui 串口 data

  好久没有使用串口通信,所以有些数据老是忘记,所以找了个时间总结一下,下次可以直接复制,不用再写了。  

  

  1.在工程文件.pro文件中加入

   

 QT += serialport

  2.之后点击构建,执行一次qmake
   在窗口类的头文件中,加入串口通信用到的头文件

#include <QtSerialPort/QSerialPort>         // 提供访问串口的功能
#include <QtSerialPort/QSerialPortInfo>      // 提供系统中存在的串口信息

  3.窗口类中,加入初始化串口函数声明

public:
    ...
    bool serialport_init();

  4.槽函数

private slots:
    void send_data();//发送串口数据
    void receive_data();//接收串口数据
    void open_serialport();//串口开启/关闭控制

  5.定义指针

private:
    ...
    QSerialPort* m_serialport;

  6.在窗口类的构造函数中,创建串口。初始化串口,关联发送数据按钮、串口接受数据和打开串口按钮对应的功能函数

m_serialport = new QSerialPort();
serialport_init();
connect(m_serialport,SIGNAL(readyRead()),this,SLOT(receive_data()));
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(send_data()));
connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(open_serialport()));

  7.实现初始化串口函数

bool MainWindow::serialport_init(){
	//获得所有可用端口列表
    QList<QSerialPortInfo> serialPortInfoList = QSerialPortInfo::availablePorts();
    if(serialPortInfoList.isEmpty()){
        return false;
    }
    QList<QSerialPortInfo>::iterator iter = serialPortInfoList.begin();
    //将所有端口添加到界面的下拉列表中
    while(iter!=serialPortInfoList.end()){
        ui->comboBox->addItem(iter->portName());
        iter++;
    }
    return true;
}

  8.实现打开串口函数

void MainWindow::open_serialport(){
	//判断串口开启状态
    if(m_serialport->isOpen()){
        //若串口已经打开,则关闭它,设置指示灯为红色,设置按钮显示“打开串口”
        m_serialport->clear();
        m_serialport->close();
        ui->label->setStyleSheet("background-color:rgb(255,0,0);border-radius:12px;");
        ui->pushButton_2->setText("打开串口");
        return;
    }else{
   		 //若串口没有打开,则打开选择的串口,设置指示灯为绿色,设置按钮显示“关闭串口”
        m_serialport->setPortName(ui->comboBox->currentText());
        m_serialport->open(QIODevice::ReadWrite);
        m_serialport->setBaudRate(QSerialPort::Baud115200);
        m_serialport->setDataBits(QSerialPort::Data8);
        m_serialport->setParity(QSerialPort::NoParity);
        m_serialport->setStopBits(QSerialPort::OneStop);
        m_serialport->setFlowControl(QSerialPort::NoFlowControl);
        ui->label->setStyleSheet("background-color:rgb(0,255,0);border-radius:12px;");
        ui->pushButton_2->setText("关闭串口");
    }

}

  9.实现接收数据函数

void MainWindow::receive_data(){
    QByteArray message;
    message.append(m_serialport->readAll());
    //使textEdit控件追加显示接收到的数据
    ui->textEdit->append(message);
}

  10.实现发送数据

  

void MainWindow::send_data(){
    QString message = ui->lineEdit->text();
    QByteArray messageSend;
    messageSend.append(message);
    m_serialport->write(messageSend);
}

  

标签:qt,void,QSerialPort,通信,serialport,ui,串口,data
From: https://www.cnblogs.com/fanzhenbo1998/p/18672652

相关文章

  • 揭秘10种主流PLC在ModbusTCP通信中的速度表现!
    大家好!我是付工。通透!终于把ModbusRTU弄明白了这样看来,ModbusTCP协议太简单了太简单了!C#轻松实现Modbus通信前面给大家介绍了一系列关于Modbus和ModbusTCP的知识。今天给大家来实测一下,对于不同品牌的PLC或板卡实现ModbusTCP通信时,通信速度有多快。一、测试界面我们使用自......
  • 科普文:算法和数据结构系列【压缩和通信利器:哈夫曼树(Huffman Tree)java示例代码解读】
    概叙科普文:算法和数据结构系列【算法和数据结构概叙】-CSDN博客科普文:算法和数据结构系列【非线性数据结构:树Tree和堆Heap的原理、应用、以及java实现】-CSDN博客科普文:算法和数据结构系列【树:4叉树、N叉树】-CSDN博客科普文:算法和数据结构系列【二叉树总结-上篇:满二叉树、......
  • WebScoket-服务器客户端双向通信
    WebScoket学习笔记1.消息推送常用方式介绍轮询浏览器以指定的时间间隔向服务器发出HTTP请求,服务器实时返回数据给浏览器。长轮询浏览器发出ajax请求,服务器端接收到请求后,会阻塞请求直到有数据或者超时才返回。SSEserver-sent-event:服务器发送事件SSE是在服务器和客户......
  • 高级QT Widgets图形绘制技巧
    高级QTWidgets图形绘制技巧补天云火鸟博客创作软件补天云网站1Qt_Widgets基础与图形系统1.1Qt_Widgets概述1.1.1Qt_Widgets概述Qt_Widgets概述QtWidgets概述引言在软件开发领域,Qt框架因其跨平台性、强大的图形界面设计能力以及丰富的类库支持而备受开发者青睐......
  • 【Gossip 协议】Redis 集群中节点之间的通信方式?
    #分布式系统#Gossip协议在分布式系统中,不同的节点进行数据/信息共享是一个基本的需求。一种比较简单粗暴的方法就是集中式发散消息,简单来说就是一个主节点同时共享最新信息给其他所有节点,比较适合中心化系统。这种方法的缺陷也很明显,节点多的时候不光同步消息的效率低,还太......
  • pyqt+mysql实现学生学籍管理系统(带.sql和.ui文件)
    所有文件已经上传至https://github.com/shuimqy/Student-Information-Management-System-implemented-with-Qt.git需要的话可自行下载,自己写的数据库大作业,尽量不要照搬提交。如果对你有帮助的话,点个赞吧,有问题欢迎留言!下面是我的涉及过程即设计报告。需求分析概念结构......
  • 安卓平板使用can-utils检查can通信功能
    安装termux打开安卓平板USB调试模式,并确保电脑安装了adb。下载termux,通过adbinstall./termux.exe安装termux到安卓平板。设置termux换源安装好termux后打开,进行换源操作。termux中输入termux-change-repo。空格切换选中状态,移动方向键切换选中项目,Enter键确认......
  • Communication Theory_exp2 MPSK通信系统的设计与性能研究
    目录一、实验目的二、实验原理2-1调制解调原理2-1-1发送端:一组M载波相位调制信号2-1-2接收端:最佳检测器判决方法2-28PSK系统框图三、实验内容3-1设计子函数3-1-18PSK信号生成子函数(对照给出4PSK信号生成子函数)3-1-2添加高斯噪声子函数3-1-3星座图绘制子函数3-......
  • 【花雕学编程】Arduino动手做(246)---设置ESP8266 V3 通过串口输出软AP的IP、MAC和WiFi
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来——小小的......
  • Qt/C++ 基于回调模式的海康3D相机开发流程详解(附工程源码、开发文档下载链接)
    本文将基于海康3D相机SDK的回调模式,通过具体代码讲解如何完成从设备初始化到图像采集的完整流程。以下是标准的流程图和具体的开发步骤。一、开发流程概述流程分为以下几个关键步骤:运行环境初始化:调用MV3D_LP_Initialize(),初始化SDK运行环境。设备发现:调用MV3D_LP_Get......