【发布时间】:2017-06-15 12:55:02
【问题描述】:
我正在尝试创建一个QProgressBar 来指示正在执行的操作,我不知道在执行之前完成该操作所需的时间。
现在我有以下内容
QProgressBar DLbar;
DLbar.setMaximum(0);
DLbar.setMinimum(0);
DLbar.show();
我已将最小值和最大值都设置为0,这应该会导致基于Qt documentation 的繁忙指示器:
如果最小值和最大值都设置为 0,则条形图显示忙碌 指标而不是步数的百分比。这很有用,因为 例如,当使用 QNetworkAccessManager 下载项目时, 无法确定正在下载的项目的大小。
当我运行程序时,会显示进度条,但它并没有显示忙碌指示器,而是已满,并且一直保持这种状态,直到操作完成。
我尝试将 DLbar 父窗口设置为主窗口,但出现了同样的问题。
例子:
QProgressBar DLbar;
DLbar.setMaximum(0);
DLbar.setMinimum(0);
DLbar.show();
for( int i=0; i<1000000; i++ )
qDebug() << i;
【问题讨论】:
-
您是否在GUI线程中执行长时间操作?如果是这样,请从另一个线程启动它并重试。
-
无法复制(Linux,Qt5.8)。请编辑您的问题以包含minimal reproducible example。
-
@G.M.已编辑,在此示例中,栏显示但已满,并且在循环结束之前不会移动(OS X Yosemite,Qt5.7)
-
您正在阻止事件循环。
Qt不是这样工作的。创建进度条并设置其参数后,您需要返回事件处理循环。 -
@G.M.我怎样才能做到这一点?我知道如何使用 QDialogBar 并通过调用
setvalue将其填满,但在有繁忙指示器时我无法找到方法