【发布时间】:2014-02-26 01:43:32
【问题描述】:
我是 GUI 新手,正在学习 FLTK 以制作多平台应用程序。在应用程序中,用户单击一个按钮并通过回调调用一个耗时的函数。由于需要很长时间,我想用函数的进度更新输出小部件。因此,我将指针传递给 Fl_Ouput 小部件并使用 widget->value(x) 和 widget->redraw() 进行更新。但是,小部件仅在整个回调函数完成时才会重绘,这使得整个事情变得毫无意义,因为它不会实时更新用户。代码格式如下:
void calculate(Fl_Widget* widget,Fl_Output* op){
/*function call to actual code but contains inside a loop:*/
stringstream progress;
progress<<p; //where p is some percentage calculated on the fly in the function
op->value(progress.str().c_str());
op->redraw();
}
int main(){
/*main and GUI code*/
Fl_Output* op = new Fl_Output(100,50,100,10,0);
Fl_Button* go = new Fl_Button(100,100,10,10,"Go");
go->callback((Fl_Callback*) calculate,op);
/*rest of GUI code and main*/
}
我的问题是 op 指向的小部件在我想要的时候没有按顺序重绘,当 op->redraw() 被调用时,但只有在计算中的其余代码已经执行之后,或者像我一样怀疑,当控件在完成执行后离开回调函数时。
我的问题是:有没有办法在它的值发生变化时以及在执行更多代码之前(可能是在将控制权传递给函数时)实时更新这样的小部件?还是有更好的办法?
谢谢,
R.
【问题讨论】: