首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QIODevice::readAll()不能正常工作?

QIODevice::readAll()不能正常工作?
EN

Stack Overflow用户
提问于 2014-03-24 16:20:38
回答 1查看 1.1K关注 0票数 0

我目前正在从事一个项目,涉及到Arduino和笔记本电脑之间的串行通信。我知道Arduino确实在发送我需要的数据,请看这张图片:http://s1.postimg.org/w5wisaetr/Help.png

现在,在另一端,我的笔记本电脑连接到Arduino,运行我使用QT创建的程序。但是,当从串口读取数据时,我无法让程序显示这些信息。

我将readData()函数连接起来,以便在收到数据时执行,如下所示:

代码语言:javascript
复制
connect(m_serialPort, SIGNAL(readyRead()), m_dataGathering, SLOT(newData()));

这是可行的,只要从Arduino传输的内容,就会调用newData()函数。但是,函数newData()不显示我需要的数据。

newData():

代码语言:javascript
复制
void DataGathering::newData()
{
    QByteArray rMsg = m_serial->readAll();
    qDebug() << rMsg.constData();
}

这只会向显示器发送空消息。像这样:http://s2.postimg.org/dkcyip2u1/empty.png

然而,下列代码起作用:

代码语言:javascript
复制
void DataGathering::newData()
{
    QByteArray rMsg("\nTest...");// = m_serial->readAll();
    qDebug() << rMsg.constData();
}

这段代码以它应该显示的方式显示消息。但是,输出显示的另一个不同之处是,当执行工作代码时,我的控制台也会显示许多帧错误,我认为这是因为不需要的字符的波光率与我需要的数据不同。

这就是为什么我开始质疑readAll()函数的原因。很明显,Arduino不仅发送了我需要的数据,而且还发送了一些不想要的字符(参见第一个链接中的图像),但我认为这并不是一个问题,因为我稍后会过滤掉这一点。

我们非常感谢所有的帮助。

更新:我发现readAll()函数返回的QByteArrays大小()等于0。

EN

回答 1

Stack Overflow用户

发布于 2014-03-27 07:52:56

如果串行端口QIODevice返回0,它就不会实现bytesAvailable。这也可能是readAll()失败的原因,这取决于它是如何实现的。但至少readAll()存在无法报告错误的问题。

尝试使用read方法来进行更好的诊断,如以下(未经测试):

代码语言:javascript
复制
void DataGathering::newData()
{
    QByteArray rMsg;
    for(;;) {
        char buf[256]; // read data in this size chunks
        qint64 len = m_serial->read(buf, sizeof buf);
        if (len <= 0) {
            if (len < 0) {
                qDebug() << "newData() read error" << m_serial->errorString();
            }
            break; // for(;;)
        }
        rMsg.append(buf, len);
    }
    qDebug() << "newData() got byte array" << rMsg.size() << ":" << rMsg;
}

它可能解决不了你的问题,但幸运的话,它会给你错误信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22614945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档