我正在尝试与1996年处理器上运行的设备建立串行连接。这意味着数据可能需要几秒钟才能传回给我。我知道每次有新数据时都会生成readyRead
信号,但我的问题是生成了多长时间。还有一种方法,我可以测试准备读取是否为低,因为如果它不再有任何数据留下来读取时停止发射,那将非常有帮助。
do{
ui->label_5->setText("readyRead");
} while (readyRead() == true);
QString output = serial->readAll();
ui->label->setText(output);
}
我希望这段代码能说明我正在尝试做什么。我无法测试它,因为我无法解决如何调用readyRead
。我认为我的readAll
命令可能在错误的地方,但我不确定?
如果有人能提供帮助,我们将不胜感激。此外,如果有人知道这样做的更好的方式,那就更好了。
我已将connect(serial, SIGNAL(readyRead()),this,SLOT(myReceivedData()));
添加到我的代码中,但我仍然遇到问题。我认为它们的发生是因为处理器速度太慢而传输数据需要几秒钟,因此我的程序退出void循环只会再次返回,因为readyRead标志仍然是真的,因为它们仍然是数据读。我尝试添加一个“睡眠”命令,但这会暂停gui和接缝以影响数据的读取时间。
我的主要问题是,我是否正确了readyRead
信号在数据转换过程中仍然存在,或者我错过了一个关键事实?
感谢您的回复。
答案 0 :(得分:2)
信号没有持续时间。对于相应的事件发出一次信号(在这种情况下,当数据可供读取时)。
您应该使用QSerialPort::readyRead()
signal
连接到slot
,如下所示:
connect(serial, SIGNAL(readyRead()),this,SLOT(readSerialData()));
void SomeClass::readSerialData(){
QByteArray readData= serial->readAll();
// Do something with readData
}
您可以参考Qt terminal example和QSerialPort documentation来使用QSerialPort
。
答案 1 :(得分:0)
对于此类要求,header('HTTP/1.1 422 Unprocessable Entity');
header('Content-Type: application/json; charset=UTF-8');
die(json_encode($errors));
exit;
有Signal and Slots。您有一个QT
,它将由指定的Signal
方法发出和使用。
如果你想读取串行数据,你应该有信号SLOT
并连接到Slot,完成如下:
readyRead
在您的班级YourClass :: YourClass(QObject* parent): QObject(parent)
{
connect(serial, SIGNAL(readyRead()),this,SLOT(myReceivedData()));
}
中使用此代码。
实施此方法如下:
Constructor
答案 2 :(得分:0)
这非常简单:当您对readyRead
信号采取行动时,您必须阅读所有可用数据。您不会再收到通知。还要记住,当有任何非零数据可供读取时会发出信号 - 所以你应该期望一个或多个字节,但不要指望任何特定的数字。例如,如果您的通信伙伴发送一定大小的数据包,除非协议保证(UDP是唯一的),否则您不应期望接收完整的数据包。
您需要设置代码以便读取整个数据,然后就可以了。