我正在尝试与运行 1996 年处理器的设备建立串行连接。这意味着数据传输回我可能需要几秒钟的时间。我知道readyRead
每次有新数据可用时都会生成信号,但我的问题是生成多长时间。这也是我可以测试就绪读取是否较低的一种方法,因为如果当它们不再有任何数据可供读取时它停止发出,那将非常有帮助。
do{
ui->label_5->setText("readyRead");
} while (readyRead() == true);
QString output = serial->readAll();
ui->label->setText(output);
}
我希望这段代码能够说明我正在尝试做的事情。我无法测试它,因为我无法弄清楚如何调用readyRead
。我认为我的readAll
命令可能位于错误的位置,但我不确定?
如果有人可以提供帮助,我们将不胜感激。另外,如果有人知道更好的方法来做到这一点,那就更好了。
edit
我已经添加connect(serial, SIGNAL(readyRead()),this,SLOT(myReceivedData()));
我的代码,但我仍然有问题。我认为它们的发生是因为处理器太慢以至于需要几秒钟来传输数据,并且因此我的程序退出无效循环只是为了再次返回,因为readyRead标志仍然为真,因为它们仍然是留下的数据读。我尝试添加“睡眠”命令,但这会暂停 gui 和接缝,从而影响数据的读取时间。
我的主要问题是我的看法是否正确readyRead
在数据转换过程中信号仍然有效,还是我错过了一个关键事实?
感谢您的回复。
信号没有持续时间。对于相应的事件(在这种情况下当数据可供读取时)会发出一次信号。
-
您应该使用QSerialPort::readyRead()
signal
通过连接到slot
如下所示:
connect(serial, SIGNAL(readyRead()),this,SLOT(readSerialData()));
void SomeClass::readSerialData(){
QByteArray readData= serial->readAll();
// Do something with readData
}
您可以参考Qt 终端示例 http://doc.qt.io/qt-5/qtserialport-terminal-example.html和 QSerialPort文档 http://doc.qt.io/qt-5/qserialport.html用于使用QSerialPort
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)