在我的大学里,我们正在使用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小部件的名称
答案 0 :(得分:3)
看起来你有两个问题:
(我假设)您正在GUI线程上调用Thread.sleep()
。换句话说,当你调用simulate时,你在与其他gui操作相同的线程上这样做。这会导致整个gui暂停。
您从未让Qt有机会实际更新UI。当你调用ui.LCDfloor.display(actualFloor)
时,一个paint事件会排队,以便UI可以更新,但是不是让UI有机会实际执行paint事件,你继续使用你的循环阻止UI进入在模拟完成之后更新。
您有两个基本修复方法:
另请注意,您无法从非gui线程更新GUI元素。因为这是家庭作业,我会把剩下的留给你:)。