首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QProgressBar忙着不工作

QProgressBar忙着不工作
EN

Stack Overflow用户
提问于 2017-06-15 12:55:02
回答 1查看 1.1K关注 0票数 3

我正在尝试创建一个QProgressBar来指示一个操作的执行,我不知道在执行之前它需要多长时间才能完成。

现在我有以下几点

代码语言:javascript
复制
QProgressBar DLbar;
DLbar.setMaximum(0);
DLbar.setMinimum(0);
DLbar.show();

我已经将最小值和最大值设置为0,这将导致基于Qt文档的繁忙指示符。

如果“最小”和“最大值”都设置为0,则栏将显示一个繁忙的指示符,而不是步骤的百分比。例如,当QNetworkAccessManager无法确定要下载的项目的大小时,这是非常有用的。

当我运行程序时,进度条会显示出来,但它不是有繁忙的指示符,而是满的,一直保持到操作结束。

我尝试将DLbar父窗口设置为主窗口,但也存在同样的问题。

示例:

代码语言:javascript
复制
QProgressBar DLbar;
DLbar.setMaximum(0);
DLbar.setMinimum(0);
DLbar.show();
for( int i=0; i<1000000; i++ )
    qDebug() << i;
EN

回答 1

Stack Overflow用户

发布于 2017-06-15 16:30:17

基本问题是,您不允许Qt事件循环处理事件。一个最简单的例子就是.

代码语言:javascript
复制
#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());
}

如果要使用Qt,您确实需要对底层事件系统有一个明确的理解。

编辑1:你问..。

即使在循环中使用QCoreApplication::processEvents(),我仍然不明白为什么它不能工作。

如果在上面的例子中,你替换了.

代码语言:javascript
复制
exit(app.exec());

和..。

代码语言:javascript
复制
while (true)
  QCoreApplication::processEvents();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44568097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档