Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt serial.readall在5.3.1中不起作用_Qt_Qtserialport - Fatal编程技术网

Qt serial.readall在5.3.1中不起作用

Qt serial.readall在5.3.1中不起作用,qt,qtserialport,Qt,Qtserialport,serial.readall在5.3.1中返回一个空缓冲区,但在5.3.0中使用同一段代码。有人遇到过同样的问题吗?有什么解决办法吗 我在MSVC 2010 windows 7上使用Qt。我已经从Qt下载页面下载了“适用于Windows 32位(VS 2010,OpenGL,537 MB)的Qt 5.3.1” 我的代码: portname=ui->lineEdit->text(); serial.setPortName(portname); if(serial.open(QIODev

serial.readall
在5.3.1中返回一个空缓冲区,但在5.3.0中使用同一段代码。有人遇到过同样的问题吗?有什么解决办法吗

我在MSVC 2010 windows 7上使用Qt。我已经从Qt下载页面下载了“适用于Windows 32位(VS 2010,OpenGL,537 MB)的Qt 5.3.1”

我的代码:

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();
portname=ui->lineEdit->text();
serial.setPortName(portname);
if(serial.open(QIODevice::ReadWrite))
{
用户界面->按钮_5->设置文本(“设备连接”);
用户界面->按钮_5->设置样式表(“背景:黄色”);
if(!serial.setBaudRate((QSerialPort::Baud115200),QSerialPort::AllDirections))

qDebug()阅读文档:

QByteArray QIODevice::readAll()

这是一个重载函数

从设备读取所有可用数据,并将其作为 QByteArray

此函数无法报告错误;返回空 QByteArray()可能意味着当前没有可用于的数据 正在读取,或发生错误

这里的关键事实是,
readAll()
从设备读取所有可用的数据,但在调用
serial.readlAll()
时,您不能保证等待数据的设备已经应答

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


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

您能否提供一些代码,以便我们可以轻松准确地再现您的场景?我在下面发布了一个答案…请检查它并告诉我它是否解决了您的问题我甚至尝试了序列号。waitForReadyRead()它总是返回false。正如我所说,同一段代码在5.3.0中工作。它不是随机的。问题在于5.3.1。谢谢。