我在Qt 5上编写了两个程序。第一个(" Debug")程序通过PCI-E设备向第二个(" Simulator")发送请求。 "模拟器"必须尽快回应。这是一个单独的问题,但现在我想问一下另一个奇怪的效果。 "调试"程序从QLineEdit写入10个字节到PCI-E设备,然后等待来自"模拟器"的答案。当答案足够快时,我会在" Debug"中看到正确的数据字节。程序窗口,否则PCI-E设备会返回已发送数据的副本,我也会看到它。问题是可以通过两种方式发送数据:单击表单上的“发送”按钮,然后单击键盘上的“返回”按钮。在这两种情况下,数据都从以下插槽发送:
void MyWin::on_pushButton_Send_clicked()
{
if(data_matched)
{
QString exp = ui.lineEdit_Data->text();
QStringList list = exp.split(QRegExp("\\s"),
QString::SkipEmptyParts);
for(int i=0; i<list.size(); i++)
{
quint8 a = list[i].toUInt(0, 16);
data[i] = a;
}
write_insys(bHandle, data, DataSize);
ui.textEdit->append( /* show sended bytes */ );
read_insys(bHandle, data, DataSize);
ui.textEdit->append( /* show received bytes */ );
}
}
但在第二种情况下(按回车键),唯一的区别是上面的插槽在以下内容中被调用:
void MyWin::on_lineEdit_Data_returnPressed()
{
on_pushButton_Send_clicked();
}
但结果是:
write_insys
和read_insys
的代码绝对是微不足道的,只需调用库函数:
bool write_insys(BRD_Handle handle, void* data, int size)
{
S32 res = BRD_putMsg(handle, NODE0, data, (U32*)&size, BRDtim_FOREVER);
return (res >= 0);
}
bool read_insys(BRD_Handle handle, void* data, int size)
{
S32 res = BRD_getMsg(handle, NODE0, data, (U32*)&size, BRDtim_FOREVER);
return (res >= 0);
}
有谁知道为什么会发生这种情况? Windows 7,Qt 5.4.2,Msvc 2010。
编辑:最有可能是Qt错误......