Qt5进度条

时间:2015-11-14 22:11:26

标签: qt

我正在开发一个Qt桌面应用程序。我需要在程序计算时显示用户不确定的进度条。我无法确定计算时间,也无法确定步数,这就是为什么在我实现中使用不确定的进度条是唯一的选择。 我试着使用QProgressDialog。唯一有效的变体(我的意思是显示用户进度条)是这样的:

QProgressDialog dialog("Computing", "Cancel", 0, 0);
dialog.setWindowModality(Qt::WindowModal);
dialog.exec();

//further code

但是你可以理解,在执行对话时,进一步的代码不起作用。

我也尝试使用方法show(),但Qt没有渲染对话框窗口,我的意思是在计算窗口期间是透明的。

那么,您是否可以建议一些可以帮助我同时显示用户进度条和计算的解决方案?计算时间可能会有很大差异。

1 个答案:

答案 0 :(得分:1)

要显示与响应式用户界面并行的某些工作的进度,我们通常必须:

  1. 未被该并行作业阻止的UI线程
  2. 执行作业的工作线程(QThread)
  3. UI应该有取消按钮来停止作业
  4. UI进度条显示固定步骤[0 ... X]或循环
  5. 如果目标是显示“浮动”进度:How to show an 'infinite floating' progressbar in Qt without knowing the percentage?

    如果目标是创建进度条,显示一些“现实”的工作程度:

    你必须以某种方式估计全部时间。做实验计算并测量全部时间。假设这将是平均时间。然后使计时器驱动进度,使其进度长度为1/2,如果没有进行,则假定剩余时间为两倍。然后再次检查剩余的1/4并再次期待两次。这样做,直到很小一部分进度仍然存在,比如,大约1%,但对用户可见并使其保持在那里直到完成计算。正如您可以猜到作业完成时,您可以将进度推进到最后,向用户显示结果就绪。

    要完全回答这个问题,你可能不得不将其分解为几个不那么“重”的问题。首先尝试计时器驱动的进度。然后尝试在单独的线程上创建数学计算作业,并使其向UI发出信号。当您对某些实现部分有更多细节时,C ++ / Qt程序员可能会回答。

    以下是一些示例:tutorial #1tutorial #2关于计时器驱动的Qt进度。