2017-08-09 28 views
0

こんにちは私はGtkmmでprogressBarを作成する方法を知っています。私はボタンをクリックするとどのようにprogressBarが10%増加するかをボタンで知っています。 ProgressBar with Gtkmm with C++

for(int i = 0; i<=10; i++){ 

     double percentage(progressBar.get_fraction() + 0.1); 
     progressBar.set_fraction(percentage); 
     getchar(); 
} 

しかし、プログレスバーが上昇した場合、私は表示されませんプログレスバーがいっぱいになったとき...私はちょうど見...:しかし、私は私はこのような意味で、自動的に増加プログレスバーを実装する方法がわかりません

ありがとうございました!

+0

CはC++ではありません。無関係な言語タグでスパムしないでください。 – Gerhardh

+0

いくつのスレッドを使用していますか?このループはUIの更新を担当するメインスレッドで実行されていますか? – Gerhardh

+0

ここに更新がありますか? – Gerhardh

答えて

0

実際に外観を変更する必要があるプログレスバー(またはスピナーなど)を使用する場合は、メインスレッドがそれに応じてUIを更新する時間を確保する必要があります。

新しい値を設定してスレッドをブロックするメインスレッドのループがgetchar()である場合、このスレッドはUIを更新して任意のウィジェットの状態を反映することはできません。

更新を表示するには、他のスレッドでgetcharを呼び出すループを移動し、メインスレッドでgtk_*関数呼び出しのみを実行する必要があります。これは、更新機能をg_idle_add()経由でエンキューすることで実現できます。

スレッドがブロックされている間にUIを更新することができます。

getcharを少し時間がかかりますが、この他の操作で置き換えると、他のスレッドで移動しない限り、この他の操作によってUIが更新されなくなります。

また、ウィジェットの状態を更新する間に、メインスレッドに制御を戻すことも考えられます。