2012-04-12 4 views
0

に更新され、我々は、Eclipseの統合でQTジャンビ(ジャワ)を使用して、インタフェースで作業しています。 Elevatorインターフェイスのデザインを改善したいと思います。QTジャンビ - QLCDNumberは私の大学ではリアルタイム

主な問題は、私はリアルタイムで床に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階と最後の1を示しているのはなぜ?あなたは私が何を望むか理解していない場合 は申し訳ありませんが、私の英語は毎日改善している:)

事前にありがとうございます。

* LCDFloorは、次の2つの問題があるように見えますQLCDNumberウィジェット

+1

あなたはQtの> = 4.6を使用している場合は、ほぼ完全に 'QLCDNumber'値プロパティにのみ' QPropertyAnimation'とエレベーターをシミュレートすることができます。 – alexisdm

答えて

3

の名前であることに注意してください:

  1. (私は仮定)あなたはGUIスレッドでThread.sleep()を呼んでいるが。言い換えれば、simulateを呼び出すと、他のGUI操作と同じスレッドでそうしています。これによりGUI全体が一時停止します。

  2. あなたはQtのに実際にUIを更新する機会を与えられたことがありません。 ui.LCDfloor.display(actualFloor)に電話すると、UIが更新されるようにpaintイベントがキューに入れられますが、UIに実際にpaintイベントを実行するチャンスが与えられるのではなく、ループを続けることで、シミュレーションは終了です。

次の2つの基本的な修正があります。

  1. は、それが悪いデザインだ、寝ないでください。代わりに、タイマーと信号を使用して変更をシミュレートします。
  2. イベントを処理するには、processEventsを使用します。

また、GUI以外の要素からGUI要素を更新することはできません。これは宿題なので、私はあなたに残ります:)。

+0

ありがとうございました。私はそれに取り組むつもりです。私はシグナルとタイマーについて学びます。私は自分のプログラムで何が起こっているかを完全に理解していました。そしてはい、それはGUIスレッドです:P – Thorba

関連する問題