2012-04-12 28 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