程序在Qt 5上的奇怪行为

时间:2016-12-19 12:05:12

标签: qt user-interface qwidget qt-signals

我在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();
}

但结果是:

  • 第一种情况:90%错误答案
  • 第二种情况:90%正确答案

write_insysread_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错误......

0 个答案:

没有答案