QT串口传输解析&例程(Qextserialport库的使用方法)

目录

一、前言

二、QextSerialPort的常用函数

三、效果展示

四、源码分析

五、Demo/相关包


一、前言

QextSerialPort是一个串口通信库,使QT4具有串口通信的功能。本例主要讲解QextSerialPort的一些使用方法和例程。

 

二、QextSerialPort的常用函数

串口设置:

setPortName(COM);               //设置串口号,如COM2
setBaudRate(baud);              //设置波特率
setDataBits(databits);          //设置数据位
setParity(parity);              //设置校验位
setStopBits(stopbits);          //设置停止位
setFlowControl(flow);           //设置流量控制
setTimeout(timeout);            //设置延迟

读写:

readAll();
write(Data);

 

三、效果展示

QT串口传输解析&例程(Qextserialport库的使用方法)_第1张图片

虚拟串口工具的作用,就是建立一个COM2和COM12的虚拟通道来通讯。

 

四、源码分析

CSerial.h

#ifndef CSERIAL_H
#define CSERIAL_H

#include "./qextserial/qextserialport.h"



class CSerial : public QextSerialPort
{

public:
    //默认构造函数,默认参数
    explicit CSerial(
                      QString portName = "COM2",
                      BaudRateType baud = BAUD9600, \
                      DataBitsType databits = DATA_8, \
                      ParityType parity = PAR_NONE,  \
                      StopBitsType stopbits = STOP_1, \
                      FlowType flow = FLOW_OFF, \
                      long timeout = 256);

    ~CSerial();


};

#endif // CSERIAL_H

CSerial.cpp

#include "CSerial.h"
#include 


CSerial::CSerial(QString portName, BaudRateType baud, \
               DataBitsType databits, ParityType parity, \
               StopBitsType stopbits, FlowType flow, \
               long timeout) :
    QextSerialPort(portName, QextSerialPort::Polling)
{
    open(QIODevice::ReadWrite);
    setBaudRate(baud);              //设置波特率
    setDataBits(databits);          //设置数据位
    setParity(parity);              //设置校验位
    setStopBits(stopbits);          //设置停止位
    setFlowControl(flow);           //设置流量控制
    setTimeout(timeout);            //设置延迟

    qDebug() << QString("open serial port: %1").arg(portName);
}


CSerial::~CSerial()
{
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

namespace Ui {
class MainWindow;
}

class CSerial;

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    void recieveData();

private slots:
    void timerEvent(QTimerEvent *event);
    void stSendData();
    
private:
    Ui::MainWindow *ui;

    CSerial *m_pSerial;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "CSerial.h"
#include 

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_pSerial = new CSerial();
    connect(ui->Btn_Send, SIGNAL(clicked()), this, SLOT(stSendData()));

    //定时器
    startTimer(10);
}

MainWindow::~MainWindow()
{
    if(m_pSerial != NULL)
    {
        //析构时要断开串口, 防止占用析构失败
        if(m_pSerial->isOpen())
        {
            m_pSerial->close();
        }

        delete m_pSerial;
        m_pSerial = NULL;
    }

    delete ui;
}


void MainWindow::timerEvent(QTimerEvent *event)
{
    //接收数据
    QByteArray readArray = m_pSerial->readAll();
    if(!readArray.isEmpty())
    {
        ui->textEdit_Receive->append("[Reveive]:" + readArray);
    }
}

void MainWindow::stSendData()
{
    //发送数据
    QByteArray sendArray = ui->textEdit_SendBuf->toPlainText().toAscii();
    int sendLen = m_pSerial->write(sendArray);
    if(sendLen == sendArray.size())
    {
        ui->textEdit_Send->append("[Send]:" + sendArray);
    }

}

 

五、Demo/相关包

VSPD虚拟串口工具(百度云盘):

链接:https://pan.baidu.com/s/110CS49jaGgJ4Q11NEWKbjQ 
提取码:uko3

源码Demo:

链接:https://pan.baidu.com/s/1V1tXGAQGgfF6wUslzKH_uA 
提取码:cjq5

你可能感兴趣的:(QT类)