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

                                 QT之QtSerialPort类实现串口通信

 

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

                                

实现过程如下:

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

QT       += core gui
QT       += serialport

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

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

void MainWindow::serialportscan()
{
      mserial = new QSerialPort();
      if(mserial!=NULL)
      {
           qDebug()<<tr("扫描存在的串口");
        foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
               {

                  QSerialPort  ser;
                  ser.setPort(info);
                  /* 判断端口是否能打开 */
                   if(ser.open(QIODevice::ReadWrite))
                  {
                        ui->comboBox->addItem(ser.portName());
                       qDebug()<<tr("Port:")+ser.portName()+tr("\r\n");
                      ser.close();
                  }

                  }
      }
    

}

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值