繁体   English   中英

通过串口读取数据时如何等到数据进来? QT C++

[英]How can I wait until data comes in when reading data over Serial Port? QT C++

我需要通过串口读取 ID 数据。 当我用皮革端口发送 ID 读取命令时,ID 数据来得有点晚。 因此,当我尝试拆分数据并将其显示在屏幕上时,它会出现空白并且应用程序会自行关闭。 我怎样才能等到数据进来?

void productDetail::on_pushButton_clicked()
{
    QSerialPortInfo info;
        QList<QSerialPortInfo> infoList = QSerialPortInfo::availablePorts();

           foreach(info, infoList) QTextStream(stdout) << info.portName();
        QString curport = info.portName();


   serial.begin(curport, 9600, 8, 0, 1, 0, false);

   if(serial.isOpen()){
       qDebug()<<"serial open";
       QString sendWC= "WR+1121"; //Read ID command
       serial.send(sendWC);
       QString serialID = serial.getString();

        serialID = serialID.trimmed();
         QStringList buffer_split = serialID.split(",");

             ui->IDlabel->setText(buffer_split[2]; //when I write this program closes

             }
   }

}

错误:QList::operator[] 中的 ASSERT 失败:“索引超出范围”,

Qt 的QIODevice提供了一个信号readyRead ( https://doc.qt.io/qt-5/qiodevice.html#readyRead ),每当有新数据可用于从设备读取时,就会发出一次信号。

productDetail class 构造函数中,将串口readyRead信号连接到一个插槽。

connect(serial, &QSerialPort::readyRead, this, &productDetail::readData);

定义readData方法如下:

void productDetail::readData()
{
    const QByteArray data = m_serial->readAll();
}

对于串行通信,不能保证您将在一次读取中接收到整个消息数据。 我更喜欢将接收到的数据存储在循环缓冲区中,并在单独的插槽中处理循环缓冲区。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM