QT Jambi - QLCDNumber实时更新

时间:2012-04-12 20:47:29

标签: java qt qt-jambi

在我的大学里,我们正在使用QT Jambi(Java)和Eclipse Integration来使用接口。 我想改进我的Elevator界面设计。

主要问题是我想实时更新QLCDNumber。 我模拟电梯工作的方法是在2层楼之间做一个Thread.sleep(1000),这样,我的QLCDNumber将显示“动画”,说“1 ... 2 ... 3 ... 4 ”。问题是QLCDNumber只显示1和4,没有动画。

所以,例如(恢复),我制作的代码就是这个:

private void simulate(int floor){
    while(actualFloor < floor){
        try{
           Thread.sleep(1000);
        }catch(InterruptedException e){};
    actualFloor++;
    ui.LCDfloor.display(actualFloor);   
    }
}

为什么此代码仅显示第1层和最后一层? 对不起,如果你不明白我的意思,我的英语每天都在提高:)

提前谢谢。

*请注意,LCDFloor是QLCDNumber小部件的名称

1 个答案:

答案 0 :(得分:3)

看起来你有两个问题:

  1. (我假设)您正在GUI线程上调用Thread.sleep()。换句话说,当你调用simulate时,你在与其他gui操作相同的线程上这样做。这会导致整个gui暂停。

  2. 您从未让Qt有机会实际更新UI。当你调用ui.LCDfloor.display(actualFloor)时,一个paint事件会排队,以便UI可以更新,但是不是让UI有机会实际执行paint事件,你继续使用你的循环阻止UI进入在模拟完成之后更新。

  3. 您有两个基本修复方法:

    1. 不要睡觉,这是糟糕的设计。相反,使用计时器和信号来模拟变化。
    2. 使用processEvents强制处理事件。
    3. 另请注意,您无法从非gui线程更新GUI元素。因为这是家庭作业,我会把剩下的留给你:)。