16,729
社区成员
发帖
与我相关
我的任务
分享
void MainWindow::on_serial_open_clicked()
{
QSerialPort serial;
serial.setPortName(ui->serial_box->currentText());
serial.setBaudRate(ui->bate_box->currentText().toInt());
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
qDebug() << serial.portName() << serial.baudRate() << endl;
if (serial.open(QIODevice::ReadOnly))
{
qDebug() << "串口打开成功";
if(serial.waitForReadyRead(1000))
{
for(int i = 0; i <= 100; i++)
{
data_efficient = convert_data(serial);
qDebug() << data_efficient;
}
serial.close();
qDebug() << "串口已关闭";
}
else
{
qDebug() << "串口连接超时";
serial.close();
qDebug() << "串口已关闭";
}
}
else
{
qDebug() << "串口打开失败:" << serial.errorString();
}
}
void MainWindow::on_serial_check_clicked()
{
ui->serial_box->clear();
foreach (const QSerialPortInfo &serial_info, QSerialPortInfo::availablePorts())
{
ui->serial_box->addItem(serial_info.portName());
}
}
QList<QString> convert_data(QSerialPort &serial)
{
QList<QString> convert;
for(int i = 0; i <= 32; i++)
{
convert.append(serial.read(1).toHex());
}
return convert;
}
如图,打开串口后原计划接收101个长度为33的QList的数据,但是实际上接收100个字节后就接收不到数据了,将程序改为每次读取1个字节,循环101次也会出现上述问题
已知数据发送设备状态正常,请教各位大神是哪里出现了问题
你的waitForReadyRead只调用了一次,有充分可能循环执行完的时候数据还没接收完
你可以看一下QSerialPort文档里的代码例子,waitForReadyRead是应该要放在循环里的