关于QT串口类

  • QSerialPort:提供访问串口的功能
  • QSerialPortInfo:提供系统中存在的串口的信息

首先需要在pro文件中加入:QT       += serialport

QSerialPort类

1.构造函数:

  • QSerialPort(QObject *parent = nullptr)
  • QSerialPort(const QString &name, QObject *parent = nullptr)
  • QSerialPort(const QSerialPortInfo &serialPortInfo, QObject *parent = nullptr)

2.其他功能函数:

  • qint32     baudRate(QSerialPort::Directions directions) //获取波特率
  • QSerialPort::DataBits     dataBits() //获取数据位保存在帧中
  • QSerialPort::FlowControl     flowControl() //获取所需的流控制模式

 

  • QSerialPort::Parity     parity() //获取奇偶校验
  • QString     portName() //获取串口名字
  • QSerialPort::StopBits     stopBits() //获取停止位
  • QSerialPort::PinoutSignals     pinoutSignals()//以位图格式返回线信号的状态
  • bool         sendBreak(int duration = 0)//如果终端使用异步串行数据,则在指定的持续时间内发送零位的连续流(以毫秒为单位)。如果成功,则返回 true;否则返回假。
  • bool         setBaudRate(qint32 baudRate, QSerialPort::Directions directions)//设置波特率

        参数:

  • QSerialPort::Baud1200
  • QSerialPort::Baud2400
  • QSerialPort::Baud4800
  • QSerialPort::Baud9600
  • QSerialPort::Baud19200
  • QSerialPort::Baud38400
  • QSerialPort::Baud57600
  • QSerialPort::Baud115200
  • QSerialPort::UnknownBaud

  • bool         setBreakEnabled(bool set = true)//设置传输线的状态处于中断状态
  • bool        setDataBits(QSerialPort::DataBits dataBits)//设置数据位,一般被8位

        参数:

  • QSerialPort::Data5
  • QSerialPort::Data6
  • QSerialPort::Data7
  • QSerialPort::Data8
  • QSerialPort::UnknownDataBits

  • bool        setDataTerminalReady(bool set)//设置线路信号 DTR 的状态(高电平或低电平)
  • bool         setFlowControl(QSerialPort::FlowControl flowControl)//设置流控制 一般为0

        参数:

  • QSerialPort::NoFlowControl
  • QSerialPort::HardwareControl
  • QSerialPort::SoftwareControl
  • QSerialPort::UnknownFlowControl
  • bool        setParity(QSerialPort::Parity parity)//设置奇偶校验  一般为0

        参数:

  • QSerialPort::NoParity
  • QSerialPort::EvenParity
  • QSerialPort::OddParity
  • QSerialPort::SpaceParity
  • QSerialPort::MarkParity
  • QSerialPort::UnknownParity

  • void         setPort(const QSerialPortInfo &serialPortInfo)//设置串口
  • QList<QSerialPortInfo> availablePorts()//返回系统上可用串行端口的列表。

例如:
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
 serial->setPort(info);
}

  • void         setPortName(const QString &name)//设置串口名
  • void         setReadBufferSize(qint64 size)//将 QSerialPort 的内部读取缓冲区的大小设置为大小字节。
  • bool         setRequestToSend(bool set)//设置线路信号 RTS 的状态(高电平或低电平)
  • bool         setStopBits(QSerialPort::StopBits stopBits)//设置停止位  一般为1

        参数:

  • QSerialPort::OneStop//1
  • QSerialPort::OneAndHalfStop//3
  • QSerialPort::TwoStop//2
  • QSerialPort::UnknownStopBits

  • qint64 QIODevice::write(const char *data, qint64 maxSize)//最多将最大大小数据字节从数据写入设备。返回实际写入的字节数,如果发生错误,则返回 -1。

3.静态成员函数:

  • virtual qint64  bytesToWrite() //如果可以从串行端口读取一行数据,则返回 true;否则返回假。
  • virtual bool     open(QIODevice::OpenMode mode) override//打开设备并将其打开模式设置为模式。

        参数:

  • QIODevice::NotOpen
  • QIODevice::ReadOnly
  • QIODevice::WriteOnly
  • QIODevice::ReadWrite//读写
  • QIODevice::Append
  • QIODevice::Truncate
  • QIODevice::Text
  • QIODevice::Unbuffered
  • QIODevice::NewOnly
  • QIODevice::ExistingOnly

4.信号:

  • void         baudRateChanged(qint32 baudRate, QSerialPort::Directions directions)//该信号在波特率改变后发出。新的波特率作为波特率传递,方向作为方向传递。
  • void dataBitsChanged(QSerialPort::DataBits dataBits)//该信号在帧中的数据位更改后发出。帧中的新数据位作为数据位传递。
  • void QIODevice::readyRead()//每当有新数据可用于从设备的当前读取通道读取时,他的信号都会发出一次。只有在新数据可用时,例如当新的网络数据有效负载到达网络套接字时,或者当新数据块附加到设备时,它才会再次发出。

串口实例:

  • serial.h文件
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<QSerialPortInfo>
#include<QSerialPort>
#include<QDebug>
namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = nullptr);
    ~Dialog();

private slots:
    void on_pushButton_clicked();


    void read_data();
    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

    void on_pushButton_5_clicked();

private:
    Ui::Dialog *ui;
    QSerialPort *serial=new QSerialPort;

};

#endif // DIALOG_H
  • serial.cpp文件
#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
ui->comboBox_2->setCurrentIndex(0);
on_pushButton_5_clicked();

}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::on_pushButton_clicked()
{
     serial->setPortName(ui->comboBox->currentText());
        serial->setBaudRate(ui->comboBox_2->currentText().toInt());
        if(serial->open(QIODevice::ReadWrite))
        {
            qDebug()<<"打开成功"<<endl;
            connect(serial,SIGNAL(readyRead()),this,SLOT(read_data()));
        }
        else {
            qDebug()<<"打开失败"<<endl;
        }
    }

void Dialog::read_data()
{
    QByteArray byte=serial->readAll();
    ui->textEdit_2->insertPlainText(byte);
    qDebug()<<serial->readAll()<<endl;
}
void Dialog::on_pushButton_2_clicked()
{
    serial->close();
    qDebug()<<"关闭串口"<<endl;
}

void Dialog::on_pushButton_3_clicked()
{
    serial->write(ui->textEdit->toPlainText().toUtf8());

}

void Dialog::on_pushButton_4_clicked()
{
    ui->textEdit_2->clear();
}

void Dialog::on_pushButton_5_clicked()
{
    ui->comboBox->clear();
    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
        {
            ui->comboBox->addItem(info.portName());

            }
}

ui图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值