运行setValue时,QTProgressBar不会更新

时间:2012-06-28 13:45:29

标签: c++ qt

我有一个for循环,它在每次迭代时设置进度条的值。 for循环执行这里描述的setProgress方法:

void setProgress(int progStep){
    progressBar->setValue(progStep);
    progStep++;
    QTextStream(stdout) << progStep << " " << progSum << endl;
}

我可以打印出最后一行,因此执行该方法但每次都不更新进度条的GUI。

当我的最大值为25(和最小0)时,该方法将打印0-25之间的每个数字。我的目标是让进度条在执行期间显示25个不同的百分比值。

结构:

 for(.....) {
     .....
     .....
     setProgress(progStep);
 }

实际发生的是,它使用百分比值更新进度条约2-3次。 for循环大约需要30秒,因此它绝对可以进行25个百分比的更新。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您必须在致电QApplication::processEvents()后致电setProgress(progStep),让GUI线程更新进度条。

答案 1 :(得分:1)

似乎你只是在没有运行事件循环的情况下调用多次setProgress(),因此GUI不会更新。

QApplication::processEvents()之后调用setProgress()以更新GUI。

如果您希望setProgress()更新GUI,无论情况如何,您都可以在进度条更新部分之后调用QApplication::processEvents()正文中的setProgress()