serial.readall
在5.3.1中返回一个空缓冲区,但同一段代码在5.3.0中运行。有人遇到过同样的问题吗?有没有解决方法呢?
我正在使用Qt和MSVC 2010 windows 7.我已经下载了#32; Qt 5.3.1 for Windows 32-bit(VS 2010,OpenGL,537 MB)"从Qt下载页面。
我的代码:
portname=ui->lineEdit->text();
serial.setPortName(portname);
if(serial.open(QIODevice::ReadWrite))
{
ui->pushButton_5->setText("Device Connected");
ui->pushButton_5->setStyleSheet("background : yellow");
if(!serial.setBaudRate((QSerialPort::Baud115200),QSerialPort::AllDirections))
qDebug()<<serial.errorString();
if(!serial.setDataBits(QSerialPort::Data8))
qDebug()<<serial.errorString();
if(!serial.setParity(QSerialPort::NoParity))
qDebug()<<serial.errorString();
if(!serial.setStopBits(QSerialPort::OneStop))
qDebug()<<serial.errorString();
if(!serial.setFlowControl(QSerialPort::HardwareControl))
qDebug()<<serial.errorString();
}
else
{
qDebug()<<"Serial port not opened. Error: "<<serial.errorString();
QTest::qSleep(2000);
exit(0);
}
serial.write(outbuff, l);
rsp=(serial.readAll()).toHex();
serial.readAll返回一个空缓冲区。当从不同的工具发送相同的输入时,我从同一个硬件获得响应。
答案 0 :(得分:0)
阅读文档:
QByteArray QIODevice :: readAll()
这是一个重载功能。
从设备读取所有可用数据,并将其作为a返回 的QByteArray。
此功能无法报告错误;回来一个空的 QByteArray()可能意味着当前没有数据可用 阅读,或发生错误。
这里的关键事实是readAll()
从设备读取所有数据可用,但在您拨打serial.readlAll()
时,您无法保证您正在等待的设备来自的数据已经回答......
我认为这段代码在Qt 5.3.0中工作的事实是随机的......
在调用serial.waitForReadyRead(...)
或更好之前,您应该在代码中使用类似serial.readAll()
的内容(这将阻止执行,直到有可读数据可用)应该重新编写代码,以便将函数连接到readyRead()
对象的serial
信号,然后从该插槽中读取可用数据。