C++ qextserialport中的readyRead()信号未发出

C++ qextserialport中的readyRead()信号未发出,c++,serial-port,signals-slots,qextserialport,qiodevice,C++,Serial Port,Signals Slots,Qextserialport,Qiodevice,我正在使用与Windows 8.1上的蓝牙设备通信。我定义了一个ComPort类。我需要首先在“COM5”上写一条消息{0xA9,0x55},要求蓝牙设备开始传输数据。然后我就可以开始读取数据了。我有一个终端应用程序,显示我已经写了消息,数据可以在“COM5”上获得 问题定义: 在comport.cpp中,既不是waitForBytesWrite()也不是waitForReadyRead()返回true。可用字节数为零,并且不会调用onReadyRead()插槽。我的代码出了什么问题 compo

我正在使用与Windows 8.1上的蓝牙设备通信。我定义了一个ComPort类。我需要首先在“COM5”上写一条消息
{0xA9,0x55}
,要求蓝牙设备开始传输数据。然后我就可以开始读取数据了。我有一个终端应用程序,显示我已经写了消息,数据可以在“COM5”上获得

问题定义:

在comport.cpp中,既不是
waitForBytesWrite()
也不是
waitForReadyRead()
返回
true
。可用字节数为零,并且不会调用
onReadyRead()
插槽。我的代码出了什么问题

comport.h

#ifndef COMPORT_H
#define COMPORT_H

#include <QObject>
#include <QDebug>
#include "qextserialport.h"
#include "qextserialenumerator.h"

class QTimer;

class ComPort : public QObject
{
    Q_OBJECT

public:
    ComPort(const QString &portName);
    ~ComPort();

private:
    QextSerialPort* port;

    void     setupPort();


private slots:
    void onReadyRead();
};

#endif // COMPORT_H
\ifndef COMPORT\H
#定义组件
#包括
#包括
#包括“qextserialport.h”
#包括“qextserialenumerator.h”
类QTimer;
类组件:公共QObject
{
Q_对象
公众:
组件(常量QString和端口名);
~ComPort();
私人:
QextSerialPort*端口;
void setupPort();
专用插槽:
void onReadyRead();
};
#endif//COMPORT\u H
comport.cpp

#include "comport.h"
ComPort::ComPort(const QString &portName)
{
    QString strPort;
    this->port = new QextSerialPort(portName);
    this->setupPort();

    connect(port, SIGNAL(readyRead()), this, SLOT(onReadyRead()));

    if (port->open(QIODevice::ReadWrite) == true)
    {
        const char mydata[] = {static_cast<char>(0xA9),static_cast<char>(0x55)};
        QByteArray data = QByteArray::fromRawData(mydata, sizeof(mydata));
        port->write(data);
        if(port->waitForBytesWritten(100))
            qDebug() << "Wrote the message";

        QByteArray responseData = port->readAll();
        while (port->waitForReadyRead(2000))
               responseData += port->readAll();

        qDebug() << "Num of bytes: " << port->bytesAvailable();
    }
    else
    {
        qDebug() << "Device is not turned on";
    }
}

ComPort::~ComPort()
{
    delete port;
}

void ComPort::setupPort()
{
    port->setBaudRate(BAUD115200);
    port->setTimeout(100); // Does nothing in Eventdriven mode!
    port->setFlowControl(FLOW_OFF);
    port->setParity(PAR_NONE);
    port->setDataBits(DATA_8);
    port->setStopBits(STOP_1);
    port->setQueryMode(QextSerialPort::EventDriven);
}

void ComPort::onReadyRead()
{
    QByteArray bytes;
    int a = port->bytesAvailable();
    bytes.resize(a);
    port->read(bytes.data(), bytes.size());
    qDebug() << "bytes read:" << bytes.size();
    qDebug() << "bytes:" << bytes;
}
#包括“comport.h”
ComPort::ComPort(常量QString和端口名)
{
QString strPort;
此->端口=新QEXTSERIALIPORT(端口名);
此->设置端口();
连接(端口,信号(readyRead()),此,插槽(onReadyRead());
如果(端口->打开(QIODevice::ReadWrite)==true)
{
const char mydata[]={static_cast(0xA9),static_cast(0x55)};
QByteArray数据=QByteArray::fromRawData(mydata,sizeof(mydata));
端口->写入(数据);
如果(端口->等待字节写入(100))
qDebug()readAll();
while(端口->waitForReadyRead(2000))
responseData+=端口->读取全部();
qDebug()setTimeout(100);//在事件驱动模式下不执行任何操作!
端口->设置流量控制(流量关闭);
端口->设置奇偶校验(无参数);
端口->设置数据位(数据_8);
端口->设置位(停止1);
端口->设置查询模式(QextSerialPort::EventDriven);
}
void ComPort::onReadyRead()
{
QByteArray字节;
int a=端口->字节可用();
字节。调整大小(a);
端口->读取(bytes.data(),bytes.size());

qDebug()很不清楚什么是FLOW\u OFF,但是“OFF”很少是正确的,QSerialPort::HardwareControl应该是您的首选。@Hans Passant然而,在当前设置下,我在终端应用程序上看到我从设备接收数据。我使用了
HardwareControl
,但没有变化。您为什么不想使用标准Qt 5类QSerialPort?