C++ QSerialPort readyread()信号
我在QByteArray中从RS232接收字节时遇到问题。我连接readyread()信号来调用我的serialport方法,并在其中使用readAll()向QByteArray读取字节。无论何时数据可用,它都会重写QByteArray,但我希望接收所有数据,然后使用数据,但现在我不能,因为它是部分的。怎么办?只需附加到数组中即可。您还需要一些标准来确定何时收到所需的所有数据。这可以是,例如,给定的字节数:C++ QSerialPort readyread()信号,c++,qt,serial-port,qtserialport,C++,Qt,Serial Port,Qtserialport,我在QByteArray中从RS232接收字节时遇到问题。我连接readyread()信号来调用我的serialport方法,并在其中使用readAll()向QByteArray读取字节。无论何时数据可用,它都会重写QByteArray,但我希望接收所有数据,然后使用数据,但现在我不能,因为它是部分的。怎么办?只需附加到数组中即可。您还需要一些标准来确定何时收到所需的所有数据。这可以是,例如,给定的字节数: class Communicator { int expect; QSerial
class Communicator {
int expect;
QSerialPort port;
QByteArray reply;
void processReply() {
...
}
public:
Communicator() {
QObject::connect(&port, &QIODevice::readyRead, [this]{
reply += port.readAll();
if (expect && reply.size() >= expect) {
processReply();
reply.clear();
expect = 0;
}
});
...
};
只需附加到数组。您还需要一些标准来确定何时收到所需的所有数据。这可以是,例如,给定的字节数:
class Communicator {
int expect;
QSerialPort port;
QByteArray reply;
void processReply() {
...
}
public:
Communicator() {
QObject::connect(&port, &QIODevice::readyRead, [this]{
reply += port.readAll();
if (expect && reply.size() >= expect) {
processReply();
reply.clear();
expect = 0;
}
});
...
};