QT中串口类“QSerialPort”的学习笔记

 QT5中已经增加了串口类QSrialPort,可以直接调用API函数进行快速开发。

QT中串口类“QSerialPort”的学习笔记_第1张图片

 

 

 

 

 

 

 

 

 

 

1. 获取串口信息

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    const auto infos = QSerialPortInfo::availablePorts();
    for (const QSerialPortInfo &info : infos)
        serialPortComboBox->addItem(info.portName());
}
  • QSerialPortInfo::availablePorts()

 

函数的功能时会检测当前电脑上串行端口,并且返回系统上串行端口的信息。

之后将获取到的信息加入Qcombobox下拉选项框中。本例中只添加了串口的名字即COM4。

 

 

2.设置串口参数并开启串口

void Dialog::openSerial()
{
    if(runButton->text() == tr("开启"))
    {
        serial = new QSerialPort();

        //port name
        serial->setPortName(serialPortComboBox->currentText());

        //open
        serial->open(QIODevice::ReadWrite);

        serial->setBaudRate(115200);
        serial->setDataBits(QSerialPort::Data8);
        serial->setStopBits(QSerialPort::OneStop);
        serial->setFlowControl(QSerialPort::NoFlowControl);

        connect(serial, SIGNAL(readyRead()), this, SLOT(readParam()));

        runButton->setText("关闭");
    }
    else
    {
        serial->clear();
        serial->close();
        serial->deleteLater();

        runButton->setText("开启");
    }
}connect(serial, SIGNAL(readyRead()), this, SLOT(readParam()));
该函数是启动串口接收功能。即当串口有数据时,readyRead()信号就会被抛出。对应的readParam()即QT中所定义的槽就会被调用。

注意:
readyRead()信号是有数据就直接抛出,在实际数据交互中,往往一帧数据有很多字节。这意味着我们一帧数据数据会触发多次信号。应当在对数据进行操作时候对数据进行校验。

3.串口发送数据
serial->write(sendData);

sendData为QByteArray类所创建的对象,即数据缓存区。

4.串口发送数据
g_RecBuf.append(serial->readAll());

QT中串口类“QSerialPort”的学习笔记_第2张图片

readAll函数会读取当前设备所有剩余数据,并将它作为字节数组返回

 

 

转载于:https://www.cnblogs.com/zhuangquan/p/10114714.html

你可能感兴趣的:(QT中串口类“QSerialPort”的学习笔记)