qt,QSerialPort的waitForReadyRead使用,一次读取所有数据

9 篇文章 0 订阅
5 篇文章 0 订阅
m_portName = "COM3";
m_seria = new SeriaPort();
m_seria->initPort(m_portName);
m_seria->sendInfo("470AFF800300000000FA");

//m_seria->m_serialPort是QSerialPort对象
QObject::connect((m_seria->m_serialPort), &QSerialPort::readyRead, = {
//QMessageBox::information(parent, “提示”, “配置”);
m_seria->m_serialPort->waitForReadyRead(10);
QByteArray info = m_seria->m_serialPort->readAll();
QByteArray hexData = info.toHex();
QString t0 = QString(hexData);
if (!t0.isEmpty()) {
qDebug() << “m_serialPort.t0” << t0;
}
});
qDebug() << “m_serialPort.t0” << “over”;
优化-真正获取所有再退出,一次接收01,共接收两次
QObject::connect((m_seria->m_serialPort), &QSerialPort::readyRead, = {
while (1) {
qDebug() << “sendInfoRet--------";
if (m_seria->m_serialPort->waitForReadyRead(5000)) {
QApplication::processEvents();
QByteArray info = m_seria->m_serialPort->readAll();
QByteArray hexData = info.toHex();
QString t0 = QString(hexData);
qDebug() << "sendInfoRet read--------
” << t0;
if(t0==“0101”)
break;
}
QThread::msleep(10);//sleep小点
}
});

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt QSerialPort 是一个用于串口通信的类库,可以方便地实现串口数据读取和写入。下面是一个基本的读取串口数据的示例代码: ```cpp #include <QCoreApplication> #include <QtSerialPort/QSerialPort> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 创建串口对象 QSerialPort serial; // 设置串口号 serial.setPortName("/dev/ttyUSB0"); // 设置波特率 serial.setBaudRate(QSerialPort::Baud9600); // 设置数据位 serial.setDataBits(QSerialPort::Data8); // 设置奇偶校验 serial.setParity(QSerialPort::NoParity); // 设置停止位 serial.setStopBits(QSerialPort::OneStop); // 设置流控制 serial.setFlowControl(QSerialPort::NoFlowControl); // 打开串口 if(!serial.open(QIODevice::ReadOnly)) { qDebug() << "无法打开串口"; return a.exec(); } // 读取串口数据 QByteArray buffer; while(serial.waitForReadyRead(100)) { buffer += serial.readAll(); } // 输出读取到的数据 qDebug() << buffer; // 关闭串口 serial.close(); return a.exec(); } ``` 在上面的代码中,我们首先创建了一个 QSerialPort 对象,并设置了串口号、波特率、数据位、奇偶校验、停止位和流控制等参数。然后使用 `open()` 函数打开串口,如果打开失败,则输出错误信息并退出程序。接着使用 `waitForReadyRead()` 函数等待串口有数据可读,然后使用 `readAll()` 函数读取数据并存储在 `buffer` 中。最后输出读取到的数据并关闭串口。 需要注意的是,在使用 `waitForReadyRead()` 函数时,我们设置了一个超时时间,如果在这个时间内没有数据可读,则函数会返回 false,退出循环。这个超时时间可以根据需要进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值