2011-12-07 49 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