dgdzas 发表于 2021-1-14 16:20:37

QT 串口能发送,不能接收

初学QT,想实现串口收发,但是只能发,不能收(断点不进接收槽函数),各位帮忙指点一下,谢谢。

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

#include "QSerialPort" //串口访问
#include "QSerialPortInfo" //串口端口信息访问

#include "QMessageBox"

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

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

void MainWindow::on_pushButton_clicked()
{
    // turn on uart"COM40"
    serial = new QSerialPort;

    serial->setPortName("COM40");
    if(serial->open(QIODevice::ReadWrite))
    {
      // 设置波特率
      serial->setBaudRate(115200);
      // 设置数据位数
      serial->setDataBits(QSerialPort::Data8);
      // 设置校验位
      serial->setParity(QSerialPort::NoParity);
      // 设置流控制
      serial->setFlowControl(QSerialPort::NoFlowControl);
      // 设置停止位
      serial->setStopBits(QSerialPort::OneStop);

      //连接信号槽
      connect(serial,SIGNAL(readyRead),this,SLOT(MainWindow::serial_read()));
      //connect(SerialPort,SIGNAL(QSerialPort::readyRead()),this,SLOT(MainWindow::serial_read()));
    }
    //打开串口
    else
    {
      QMessageBox::about(NULL, "提示", "串口COM40无法打开\r\n不存在或已被占用");
      return;
    }

}

void MainWindow::serial_read()
{
    QString buffer_1;
    int a = 0;

    //从缓冲区中读取数据
    QByteArray buffer = serial->readAll();

    if(!buffer.isEmpty())//如果非空说明有数据接收
    {
      //转换成16进制大写
      QString str=buffer.toHex().data();
      str=str.toUpper();

      //一个16进制占4位,8位为一字节,所以每两位16进制空一格
      for(int i=0;i<str.length();i+=2)
      {
               QString str_1 = str.mid (i,2);
               buffer_1 += str_1;
               buffer_1 += " ";
      }

      //读取之前显示数据
      QString receive = ui->textEdit->toPlainText();

      //清空显示
      ui->textEdit->clear();

      //重新显示
      if(a==0){
                receive += QString(buffer);
                ui->textEdit->append(receive);
                }//直接显示
      else    {
                receive += QString(buffer_1);
                ui->textEdit->append(receive);
                }//16进制显示
      }
      buffer.clear();
}

void MainWindow::on_pushButton_2_clicked()
{
    serial->write("aa");
}

canspider 发表于 2021-1-14 18:28:04

跑了一下,可以收发,没问题

lqluocn 发表于 2021-1-14 19:34:21

看一下是QT的哪个版本?
页: [1]
查看完整版本: QT 串口能发送,不能接收