Qt serial.readall在5.3.1中不起作用

时间:2014-08-22 08:55:55

标签: qt qtserialport

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返回一个空缓冲区。当从不同的工具发送相同的输入时,我从同一个硬件获得响应。

1 个答案:

答案 0 :(得分:0)

阅读文档:

  

QByteArray QIODevice :: readAll()

     

这是一个重载功能。

     

从设备读取所有可用数据,并将其作为a返回   的QByteArray。

     

此功能无法报告错误;回来一个空的   QByteArray()可能意味着当前没有数据可用   阅读,或发生错误。

这里的关键事实是readAll()从设备读取所有数据可用,但在您拨打serial.readlAll()时,您无法保证您正在等待的设备来自的数据已经回答......

我认为这段代码在Qt 5.3.0中工作的事实是随机的......

在调用serial.waitForReadyRead(...)更好之前,您应该在代码中使用类似serial.readAll()的内容(这将阻止执行,直到有可读数据可用)应该重新编写代码,以便将函数连接到readyRead()对象的serial信号,然后从该插槽中读取可用数据。