可能重复:
编码进度条建议
我用 C++ 编写了一个可以编码和解码纯文本文件(压缩和解压缩)的应用程序。现在我正在使用 Qt 创建 gui,并希望在用户运行压缩时添加一个显示压缩进度的进度条,这类似于 winrar 或一般设置应用程序。是否可以创建表示当前执行时间/总执行时间百分比的进度条?或者我可以像显示下载状态的进度条一样做一个近似值。创建此类进度条的一般方法是什么?
可能重复:
编码进度条建议
我用 C++ 编写了一个可以编码和解码纯文本文件(压缩和解压缩)的应用程序。现在我正在使用 Qt 创建 gui,并希望在用户运行压缩时添加一个显示压缩进度的进度条,这类似于 winrar 或一般设置应用程序。是否可以创建表示当前执行时间/总执行时间百分比的进度条?或者我可以像显示下载状态的进度条一样做一个近似值。创建此类进度条的一般方法是什么?
一般的方法是让一个线程来完成工作,而另一个线程使 UI 保持最新。
然后,您必须定义一种机制(以最简单的形式,一个全局变量),使用该机制更新 UI 的线程可以了解已完成工作的百分比。然后,您可以绘制适当的小部件等。
通常,使用(至少)两个线程,您需要的不仅仅是共享变量。更新 UI 的线程必须能够完全理解正在发生的事情、可用的新信息、正在采取的操作等。请注意,实际上是另一个线程在做任何有用的事情。UI线程将是观察程序状态为用户绘制一些东西的人。
完成这项工作的线程应该能够估计其进度。在您的情况下,例如通过number_of_bytes_decoded / total_file_size
. 有时,无法预测进度,因此您只需将进度更新为“flash”或其他任何内容,表明正在取得进展,但您无法给出百分比。例如,当您看到进度条内的某些东西向左和向右移动时,就会发生这种情况。