QProgressDialog在暂停时没有绘制

QProgressDialog not drawing during pause

本文关键字:绘制 暂停 QProgressDialog      更新时间:2023-10-16

我有理由在循环中使用QProgressDialog,并且我希望在显示对话框之前弹出对话框并等待用户输入。然而,在循环的第二次中,对话框在开始正确更新之前保持匿名。下面是一些示例代码:

QProgressDialog progressDialog("progress", "Cancel",
               0, 10000);
progressDialog.setMinimumDuration(0);
progressDialog.setWindowModality(Qt::WindowModal);
while(1) {
  progressDialog.show();
  progressDialog.setValue(0);
  qApp->processEvents();
  getchar();
  for(unsigned int i = 0; i < 10000; i++)
    progressDialog.setValue(i+1);
}

第一次显示对话框中的所有小部件,但第二次没有显示。如果我将QProgressDialog声明移动到循环中,也会发生同样的事情。我如何让它在每次通过循环等待用户输入时显示所有小部件,为什么上面的代码中没有这样做?

这是因为您在GUI线程中完成所有工作。由于getchar()在用户输入某些内容之前不会返回,因此GUI线程无法重新绘制小部件和窗口。

你需要:

  • 将工作代码(从用户读取数据并对其执行操作)移动到其他对象并在单独的线程中运行,很好的例子是qt-project页面:http://qt-project.org/doc/qt-4.8/qthread.html#details
  • 使用信号和插槽连接worker对象