QProgressBar忙着不工作

时间:2017-06-15 12:55:02

标签: qt c++11

我正在尝试创建一个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;

1 个答案:

答案 0 :(得分:2)

基本问题是您不允许[Symfony\Component\Debug\Exception\FatalErrorException] Class 'Custom\Timeshow\TimeshowServiceProvider' not found 事件循环处理事件。演示的最小例子就是......

Qt

如果你要使用#include <cstdlib> #include <chrono> #include <thread> #include <QApplication> #include <QProgressBar> int main (int argc, char **argv) { QApplication app(argc, argv); QProgressBar DLbar; DLbar.setMaximum(0); DLbar.setMinimum(0); DLbar.show(); /* * The following sleep will prevent any events being processed for 10s... */ std::this_thread::sleep_for(std::chrono::seconds(10)); /* * ...after which we start the event loop and everything should start working. */ exit(app.exec()); } ,你真的需要深入了解基础event system

编辑1:你问......

  

我仍然不明白为什么即使我使用它也不起作用   循环中的QCoreApplication :: processEvents()。

如果在上面的示例中替换了...

,它将起作用
Qt

...与

exit(app.exec());