[英]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
信号在数据转换过程中仍然是正确的感到正确,还是我错过了一个关键事实?
感谢您的答复。
没有信号持续时间。 对于相应的事件(在这种情况下,当可以读取数据时)会发出一次信号。
您应该通过连接到slot
来使用QSerialPort::readyRead()
signal
,如下所示:
connect(serial, SIGNAL(readyRead()),this,SLOT(readSerialData())); void SomeClass::readSerialData(){ QByteArray readData= serial->readAll(); // Do something with readData }
对于这种要求, 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.