QT之QtSerialPort类实现串口通信 发送与接收 带工程

                                 QT之QtSerialPort类实现串口通信

 

         QT提供了QtSerialPort类与QSerialPortInfo类,该类实现串口相关操作,和windows的serialport类相似,其中QtSerialPort实现串口的读写、初始化相关操作;QSerialPortInfo类提供相关串口信息。通过这两个类实现了一个简单的串口通信工具,其效果如下:

                                QT之QtSerialPort类实现串口通信 发送与接收 带工程_第1张图片

实现过程如下:

1、在*.pro工程里添加QtSerialPort,因为QtSerialPort不属于默认库。

QT       += core gui
QT       += serialport

2、创建界面相关操作按钮和显示。添加两个pushButton、两个TextEdit等控件

QT之QtSerialPort类实现串口通信 发送与接收 带工程_第2张图片

3、初始化串口,主要实现扫描有效的串口,把存在的串口,添加到Combox列表中去。

void MainWindow::serialportscan()
{
      mserial = new QSerialPort();
      if(mserial!=NULL)
      {
           qDebug()<comboBox->addItem(ser.portName());
                       qDebug()<

4、打开串口,设置相关参数,包括串口端口、波特率、数据位、奇偶校验,注册接收槽等等,最好调用open实现串口操作。

//@打开串口
bool MainWindow::serialopen()
{


   /* 设置串口名称 */
  mserial->setPortName(ui->comboBox->currentText());
  /* 设置波特率 */
  mserial->setBaudRate(QSerialPort::Baud9600);
  /* 设置数据位数 */
  mserial->setDataBits(QSerialPort::Data8);
  /* 设置奇偶校验 */
  mserial->setParity(QSerialPort::NoParity);
  /* 设置停止位*/
  mserial->setStopBits(QSerialPort::OneStop);
  /* 设置流控制 */
  mserial->setFlowControl(QSerialPort::NoFlowControl);

  mserial->setReadBufferSize(1024);
   /* 打开串口 */
  if(mserial->open(QIODevice::ReadWrite)==true)
  {

    QObject::connect(mserial, &QSerialPort::readyRead, this, SerialRecvMsgEvent);
   return true;
  }
  else
  {

   return false;
  }



}

5、接收数据,读取缓冲区里的所有数据,然后输出到界面上。

void MainWindow::SerialRecvMsgEvent()
{
    
       if(mserial->bytesAvailable() >= 0)
       {
          // buf.remove(0,buf.length());
           buf = mserial->readAll();
           if(!buf.isEmpty())
           {

               /* 把接受到的数据显示到界面上 */
               ui->RecvTextEdit->setText(buf);

           } 
       }else
       {
           qDebug()<<"接受数据出错" + QString::number(mserial->bytesAvailable());
       }

    
}

6、发送数据,添加按键槽,实现串口发送数据。

void MainWindow::on_pushButton_clicked()
{
 if(mserial->isOpen())
     {
    QByteArray sendData = ui->SendTextEdit->toPlainText().toUtf8();
    mserial->write(sendData);
     }
}

7、源码地址

https://download.csdn.net/download/u011996698/10769310

你可能感兴趣的:(QT之路)