Qt serial.readall 在 5.3.1 中不起作用

Posted

技术标签:

【中文标题】Qt serial.readall 在 5.3.1 中不起作用【英文标题】:Qt serial.readall is not working in 5.3.1 【发布时间】:2014-08-22 08:55:54 【问题描述】:

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

我在 MSVC 2010 windows 7 中使用 Qt。我从 Qt 下载页面下载了“Qt 5.3.1 for Windows 32-bit (VS 2010, OpenGL, 537 MB)”。

我的代码:

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】:

阅读文档:

QByteArray QIODevice::readAll()

这是一个重载函数。

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

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

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

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

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

【讨论】:

我什至尝试过 serial.waitForReadyRead() 总是返回 false。正如我所说,同一段代码在 5.3.0 中有效。它不是随机的。问题出在5.3.1。谢谢。

以上是关于Qt serial.readall 在 5.3.1 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Windows XP 上的 QMediaPlayer (qt 5.3.1)

Linux Mint x64:Qt 5.3.1 插件部署:不兼容的 qt 库

Qt 5.3.1 应用程序错误:无法找到或加载 Qt 平台插件“windows”

Qt 5.3.1 TableView 未更新

Qt 5.3.1:macdeployqt 尝试包含我硬盘上的所有内容;怎么修?

qt最新版5.3.1中的头文件编程问题