2011-08-25 34 views
2

我遇到了一個奇怪的問題,無法長時間重新繪製小部件。Qt小部件在某些條件下無法重繪

我有一個非Qt線程播放音頻,並根據音頻播放位置定期將自定義事件發佈到我的GUI線程。 GUI線程通過生成一些視覺反饋(例如,在小部件頂部的顯示標籤)並在其自身上調用repaint()來作出反應。這在Mac OSX上效果很好,它在單元測試應用程序中運行良好,我在Windows上運行功能(XP & 7),但是,在Windows XP/7上,我的真實應用程序沒有正確重新繪製窗口,直到音頻播放結束。

-> Custom Event 
-> QEvent::Paint (12) 
-> Custom Event 
-> QEvent::Paint (12) 
etc. 

錯誤的行爲在我的實際應用中發現:發生

-> Custom Event 
-> QEvent::UpdateRequest (77) 
-> Custom Event 
-> QEvent::UpdateRequest (77) 
etc. 
-> QEvent::Paint (12) 

我曾嘗試過各種東西,迫使重繪,如

正確的行爲對OSX和我的單元測試中觀察,QCoreApplication :: processEvents,但都無濟於事。我也嘗試消除線程間事件作爲罪魁禍首,並使用週期性定時器從GUI線程輪詢當前音頻位置並更新小部件,但也沒有太多運氣。

任何想法如何進一步診斷這將不勝感激!

+1

你叫update()還是repaint()? –

+0

我已經嘗試更新和重繪。 – Alex

+0

可以在這裏顯示一些你的代碼嗎?也許只是Windows上的main()? – blueskin

回答

0

您是否嘗試直接調用paint事件處理程序?即paintEvent(NULL)

+0

好主意。我今晚會嘗試。 – Alex

+0

沒有這個運氣。直接調用paintEvent()似乎沒有什麼區別。 – Alex