qt读取就绪信号

时间:2015-07-24 08:08:49

标签: c++ qt serial-port flags

我正在尝试与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信号在数据转换过程中仍然存在,或者我错过了一个关键事实?

感谢您的回复。

3 个答案:

答案 0 :(得分:2)

  1. 信号没有持续时间。对于相应的事件发出一次信号(在这种情况下,当数据可供读取时)。

  2. 您应该使用QSerialPort::readyRead() signal连接到slot,如下所示:

    connect(serial, SIGNAL(readyRead()),this,SLOT(readSerialData()));
    
    void SomeClass::readSerialData(){
    QByteArray readData= serial->readAll();
    // Do something with readData
    
    }
    
  3. 您可以参考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是唯一的),否则您不应期望接收完整的数据包。

您需要设置代码以便读取整个数据,然后就可以了。