天天看点

qt 串口通信程序示例

在和一些硬件设备的通信(伺服机等)中,串口通信是最常用的,在此整理下串口通信的程序,核心代码包括两个文件com.h和com.cpp,如下所示:

com.h

#ifndef COM_H
#define COM_H

#include <QObject>
#include<QtSerialPort/QSerialPort>
#include<QtSerialPort/QSerialPortInfo>
#include<QMessageBox>
#include<QDebug>
#include<QByteArray>
#include<iostream>
#include<vector>
using namespace std;
class COM : public QObject
{
    Q_OBJECT
public:
    explicit COM(QObject *parent = nullptr);
    QSerialPort *serial;

signals:
    void newMessage(vector<int> data);
public slots:
    //接收数据
    void dataReceived();


};

#endif // COM_H
           

com.cpp

#include "com.h"

COM::COM(QObject *parent) : QObject(parent)
{


    serial = new QSerialPort;
    serial->setPortName("COM1");
    if(!serial->open(QIODevice::ReadWrite))
    {
       qDebug()<<"串口打开失败";
    }
    serial->setBaudRate(QSerialPort::Baud57600);//设置波特率为57600
    serial->setDataBits(QSerialPort::Data8);//设置数据位8
    serial->setParity(QSerialPort::NoParity); //校验位设置为0
    serial->setStopBits(QSerialPort::OneStop);//停止位设置为1
    serial->setFlowControl(QSerialPort::NoFlowControl);//设置为无流控制

    //connect(serial,&QSerialPort::readyRead,this,&MainWindow::ReadData);
    QObject::connect(serial,&QSerialPort::readyRead,this,&COM::dataReceived);
}

void COM::dataReceived()
{

    //接收数据存入vector<double>,
    QByteArray temp = serial->readAll();
    QDataStream out(&temp,QIODevice::ReadWrite);
    vector<int> arr;
    while(!out.atEnd())
    {
        qint8 outChar = 0;
        out>>outChar;
        QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));
        arr.push_back(str.toInt(NULL,16));

    }
    emit newMessage(arr);



}
           

在自己的项目中,如果要使用串口通信,加入上述的两个文件之后,然后建立和信号自己的关联即可。上述展示的只是接收信息的方法,发送信息直接调用com类中的成员变量serial的成员方法write即可。