2011-08-25 33 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