0

在我的大学里,我们使用 QT Jambi (Java) 和 Eclipse 集成来处理接口。我想改进我的电梯界面设计。

主要问题是我想用地板实时更新 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);   
    }
}

为什么这段代码只显示一楼和最后一楼?对不起,如果你不明白我想要什么,我的英语每天都在进步 :)

先感谢您。

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

4

1 回答 1

3

看起来你有两个问题:

  1. (我假设)您正在调用Thread.sleep()GUI 线程。换句话说,当您调用模拟时,您是在与其余 gui 操作相同的线程上执行此操作的。这会导致整个 gui 暂停。

  2. 你从来没有让 Qt 有机会真正更新 UI。当您调用ui.LCDfloor.display(actualFloor)时,绘制事件会排队,以便可以更新 UI,但不是让 UI 有机会实际执行绘制事件,而是继续执行循环,这会阻止 UI 在模拟之后更新完成了。

您有两个基本修复:

  1. 不要睡觉,这是糟糕的设计。相反,使用计时器和信号来模拟更改。
  2. 使用processEvents强制处理事件。

另请记住,您不能从非 gui 线程更新 GUI 元素。由于这是家庭作业,剩下的交给你:)。

于 2012-04-13T00:08:10.583 回答