[英]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.