2011-12-07 67 views
0

我在我的应用程序中调用各种子功能取决于配置的功能。每个子函数都是计算密集型的,所以我添加了一个回调来更新模态QProgressDialog的状态。每个子功能显示0-100%自身完成,而不是父功能。停止QProgressDialog从停靠图标反弹

如果对话框关闭子功能并且窗口没有焦点,则停靠栏图标会弹起。如果由于某种原因用户切换焦点而留下更多的子功能,这可能会非常恼人!

有没有办法在QProgressDialog关闭时没有焦点时禁用图标弹跳?

回答

0

如果设置了QProgressDialog::setAutoClose(false),则进度对话框将在子功能之间保持打开状态并停止停靠图标弹跳。

0

如果我的理解正确,你描述的场景(即使工作“正确”)导致我的宠物之一。那就是:进度条到达最后,,然后从0%开始。我宁愿一块软件只是说“工作......”而不是给我一个故意误导性的进度条!

为什么不把你的进度条分成几个阶段,然后为每个子功能分配一部分进度条?在最简单的情况下,如果你有两个阶段的持续时间相等,你可以让第一阶段从0到50,然后第二阶段从50到100.这样,你只需要放下并取下一次进度条。

如果你的情况很复杂,你需要做一些预先计算来划分进度范围(以及一些比例导向数学)。但即使是一个粗略的近似值,进度条以0到100的不规则速度前进,也比重新开始!

假设有三个阶段。第一个需要一分钟,第二个需要两分钟,第三个需要半小时。当然 - 看起来在三分钟后完成66.6%会有些奇怪,然后通过最后的33.3%慢慢观察半小时。但是这并不像回到零那么糟糕。此外,你应该能够比这更好地估计。即使有些事情是随意变化的(例如早期阶段读数N会对后期阶段产生严重影响)......您是不是可以扫描该前期?分配扫描可能有5%的时间,并从那里开始。

+0

我明白你的观点;但是一个QProgressDialog有一个QLabel,并且对于每个子函数,文本被更新以显示正在发生的事情,因此不会出现相同的任务从0%开始。我的方法的原因是处理结合阶段的复杂性。对于某些功能,我可以预测所需的时间并将其放入对话框中,但只能在函数启动后才能使用。 – koan

+0

@koan QProgressDialog有一个'setLabel()'函数,因此它可以在运行时进行更改,您不必关闭并重新打开它。请相信我 - 即使您只是猜测每个阶段需要分配多少范围,这对再次启动进度条也是一种改进。否则是基于*有极大缺陷的信念*。也就是说,以某种方式,具有N个进度条以稍微更线性的方式进行比单调增加的一个进度条更好。 http://en.wikipedia.org/wiki/Monotonic_function – HostileFork

+0

正如我上面所说,我更新标签文本,而它正在运行,以显示当前的子功能。我无法在Apple人机界面指南中找到任何说您不应重置进度的内容。我可能需要调用大量的子功能。在您看来,我可以看到价值,但由于需要进行重大改写,目前我宁愿停用弹跳式停靠栏图标。 – koan