Qt小部件在某些条件下无法重绘

时间:2011-08-25 04:16:09

标签: c++ windows qt

我遇到一个奇怪的问题,即窗口小部件很长时间没有重新绘制。

我有一个播放音频的非Qt线程,并根据音频播放位置定期将自定义事件发布到我的GUI线程。 GUI线程通过生成一些视觉反馈(例如,小部件顶部的显示标签)并在其自身上调用repaint()来做出反应。这在Mac OSX上运行良好,并且它在我在Windows(XP& 7)上运行该功能的单元测试应用程序中工作正常,但是,在我的实际应用程序中,在Windows XP / 7上,小部件无法正确重绘,直到音频播放结束。

在OSX和我的单元测试中观察到正确的行为:

-> 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)

我已尝试过各种强制重绘的东西,例如QCoreApplication :: processEvents,但都无济于事。我还试图消除线程间事件作为罪魁祸首,并使用周期性计时器从GUI线程轮询当前音频位置并更新小部件,也没有太多运气。

非常感谢任何有关如何进一步诊断这一点的想法!

1 个答案:

答案 0 :(得分:0)

您是否尝试直接调用paint事件处理程序?即paintEvent(NULL)