繁体   English   中英

qt读取就绪信号

[英]qt read ready signal

我正在尝试与在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标志仍然为true,因为它们仍然留有数据读。 我尝试添加“睡眠”命令,但这会暂停GUI和接缝以影响数据的读取时间。

我的主要问题是,我是否对readyRead信号在数据转换过程中仍然是正确的感到正确,还是我错过了一个关键事实?

感谢您的答复。

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

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

     connect(serial, SIGNAL(readyRead()),this,SLOT(readSerialData())); void SomeClass::readSerialData(){ QByteArray readData= serial->readAll(); // Do something with readData } 
  3. 您可以参考Qt终端示例和QSerialPort 文档以了解如何使用QSerialPort

对于这种要求, QT具有信号和插槽 您有一个Signal ,该Signal将通过分配的SLOT方法发射和消耗。

当您要读取串行数据时,应准备好Signal readyRead并连接到Slot,操作如下:

YourClass :: YourClass(QObject* parent): QObject(parent)
{
    connect(serial, SIGNAL(readyRead()),this,SLOT(myReceivedData()));       
}

作为此代码在您的Class Constructor

实施此方法如下:

void YourClass :: myReceivedData()
{
    QByteArray readData= serial->readAll();
    qDebug() << readCurData;   // Here I am printing the received Serial Data
} 

这非常简单:对readyRead信号进行操作时, 必须读取所有可用数据 您将不会再收到通知。 还请记住,当有任何非零数量的数据可供读取时,将发出信号-因此,您应该期望一个或多个字节,但是不要期望任何特定的数字。 例如,如果您的通信伙伴发送了一定大小的数据包,除非协议保证(UDP是唯一的协议),否则您不应期望收到完整的数据包。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM