编码进度条建议

时间:2010-09-07 11:59:06

标签: c++ qt progress-bar xml-parsing

在我的应用程序中,我正在解析xml文件并使用xsd架构验证内容。当xml文件变大时,需要一些时间来解析文件并验证内容。在这种情况下,我想要使用进度条可视化解析和验证阶段。怎么做?

注意:我正在使用Qt和C ++

3 个答案:

答案 0 :(得分:3)

基本上你只需创建一个QProgressDialog实例:

QProgressDialog progress("Parsing...", "Abort", 0, numOperations, this);
progress.setWindowModality(Qt::WindowModal);

其中numOperations是解析完成之前需要完成的全部事情。为此,您可能需要首先快速浏览数据,您只需计算要解析的元素总数或类似内容,并将此值设置为前一个示例代码中的最大值numOperations。然后你进行实际的处理过程并定期调用setValue:

progress.setValue(finishedOperations);

其中finishedOperations是到目前为止解析的内容的数量。

这假设您需要最简单的解决方案,其中进度条显示为单独的模式对话框。如果您想让用户有机会中止该过程,您需要实现一个连接到canceled() signal的插槽。

如果您不想在模式对话框中使用进度条,只需在某处显示QProgressBar即可。它通过定期调用setValue()以类似的方式工作。

答案 1 :(得分:1)

假设xml解析实现从连接到文件读取器的某种缓冲流中提取数据 - 读取文件大小,然后每次输入缓冲区从文件读取器抓取另一个块时,更新进度指示器。这可以通过从文件阅读器类派生一个新类并覆盖读取块函数来报告进度来最方便地完成。

这种方法的优点是它不需要你为预解析做额外的工作来估计操作的数量,并且可以用于任何种类的流文件处理方案,无论是xml还是任何其他格式

答案 2 :(得分:0)

算法的主要循环结构是什么?

如果您正在通过文档进行单次传递,您可能不知道何时即将结束,为了获得良好的进度表,您可能需要切换到两次传递实现 - 这可能是较慢,但给出了反馈优势。