【问题标题】:Indefinite Progress in QProgressBarQProgressBar 中的无限进度
【发布时间】:2012-07-12 13:04:30
【问题描述】:

我需要在我正在使用的 QProgressBar 中显示不确定的进度/忙碌效果。我在文档中读到,可以通过将最大值和最小值设置为 0 来创建它。我尝试了相同的方法,但无法正确设置。我读到了一个可能的错误,即当我使用 Plastique 样式时,不会发生这种效果。是否可以通过其他方式获得效果?

【问题讨论】:

  • 循环播放:if(progressBar->value == 100) progressBar = 0;

标签: c++ qt


【解决方案1】:

一个(不一定是 C++)解决方案可能是只显示一个显示正在运行的进度条的动画 GIF?

【讨论】:

    【解决方案2】:

    我也遇到过这个问题!我发现如果你确保工作是在工作线程中完成的,而不是在主线程中,它会更好地工作。但遗憾的是,您仍然会遇到一些进度条显示奇怪内容的情况。

    【讨论】:

    • 这个“奇怪的东西”很可能是因为你自己的代码被重新输入了。 QProgressBar::setValue 是一个不受欢迎的角色:它在你背后调用 QApplication::processEvents()。因此它可以reenter the very slot you called it from。请参阅该答案以获取有关运行到完成代码的一点旁注,并提供一些实用参考。我使用的 Qt 总是使用从进度条的setValue() 中删除processEvents() 的补丁进行修改。确保在 GUI 线程中运行的代码始终执行从运行到完成的短作业是您自己的工作。
    • @KubaOber 不,不可能。当我调用QProgressBar::setValue 时,我从来没有遇到过问题,只有当我不调用它时才会遇到问题(因为这是一个不确定的进度条)。另外,我在处理进度条时总是使用工作线程(效果更好),所以 GUI 线程几乎没有。
    • 当您在 GUI 线程中工作时,您很可能会长时间阻塞它。您可以检测事件循环 as I described in another answer 并验证是否是这种情况。
    • @KubaOber 正如我所说,GUI 线程中没有任何工作!所有工作都在工作线程中完成。所以我不明白你的意思。
    • 嗯,你说你有探针,如果工作在非 gui 线程中完成,它会更好地工作。
    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多