我遇到了一個奇怪的問題,無法長時間重新繪製小部件。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線程輪詢當前音頻位置並更新小部件,但也沒有太多運氣。
任何想法如何進一步診斷這將不勝感激!
你叫update()還是repaint()? –
我已經嘗試更新和重繪。 – Alex
可以在這裏顯示一些你的代碼嗎?也許只是Windows上的main()? – blueskin