当前位置: 代码迷 >> QT开发 >> QT5.3的串口通讯有关问题,怀疑QSerialport类有bug
  详细解决方案

QT5.3的串口通讯有关问题,怀疑QSerialport类有bug

热度:179   发布时间:2016-04-25 03:05:51.0
QT5.3的串口通讯问题,怀疑QSerialport类有bug
本帖最后由 wj066000 于 2014-12-02 16:26:12 编辑
我用的是QT5自带的QSerialport类
串口的另一端一个采集仪,它检测到开/关门事件就发给我19个字节的数据
问题是:偶尔有时候一次读到的数据为什么不足19个字节,而且在下次开/关门事件触发之前根本就读不出来那些没读到的数据,下次开/关门的时候,上次没读完的数据又读了出来
我总怀疑QT5的串口有bug,哪位高手帮我看看是不是我的代码写的有问题
读取串口代码如下(放在一个线程里不停的循环读取,mysp是一个QSerialport对象)

void mythread4::run()
{
    while(this->stoped==false)
    {
        if(mysp->waitForReadyRead(-1))  //等待有数据到达,-1表示永不超时
        {
            this->msleep(150);  //延时一会,等待数据全部到达
            QByteArray b=mysp->readAll();
            for(int i=0;i<b.count();i++)
            {
                qDebug()<<QString::number(b[i]);  //调试输出读到的数据
            }
        }
    }
}

------解决思路----------------------
你可以试试它的异步API,使用信号槽。这样也可以避免多线程
------解决思路----------------------
使用信号和槽比较简单,有一个非官方的串口操作类 qextserialport ,也很好用
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

使用信号和槽比较简单,有一个非官方的串口操作类 qextserialport ,也很好用

请问到哪儿去下载qextserialport这个类的源码呢?

只要QtSerialPort 的异步API可以用,你还是用它吧。

QextSerialPort 1.2RC 已经两三年没有更新了,而且我也没有更新它的打算。

呃,QT的串口通讯真的很蛋疼啊,又遇到一个更奇怪的问题,开机直接用QT程序读取串口数据无论如何都是错误的,总比正确值小1,可是用串口助手打开一遍再关闭,QT程序读出来的数据就正常了,很无奈啊...


这个问题的话,你倒是可以试试QextSerialPort 1.2RC。

如果用QextSerialPort正常的话,你可以去给QtSerialPort提交一个BUG
  相关解决方案