2012-04-12 29 views
0

在我的大学里,我们正在使用接口,使用QT Jambi(Java)和Eclipse Integration。 我想改进我的电梯界面设计。QT Jambi - QLCDNumber实时更新

主要问题是我想实时地更新QLCDNumber。 我所做的模拟电梯的工作,是在两层之间做一个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

如果您使用的是Qt> 4.6,那么您几乎可以在'QLCDNumber'属性中仅使用'QPropertyAnimation'模拟电梯。 – alexisdm 2012-04-13 01:06:02

回答

3

的名字看起来你有两个问题:

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

  2. 你从来没有给过Qt实际更新UI的机会。当你打电话给ui.LCDfloor.display(actualFloor)时,一个绘画事件就会排队,这样就可以更新UI,但不是让UI有机会真正执行绘画事件,而是继续使用循环,这样可以防止UI在更新之前更新模拟完成。

你有两个基本的修正:

  1. 别睡了,这是设计不良。相反,使用计时器和信号来模拟这些变化。
  2. 使用processEvents强制要处理的事件。

还请记住,您不能从非gui线程更新GUI元素。因为这是作业,我会把剩下的留给你:)。

+0

谢谢你的回答。我要去研究它。我将学习信号和定时器。我完全理解我的程序中发生了什么。是的,这是在GUI线程上:P – Thorba 2012-04-13 18:49:59