我遇到了一个奇怪的问题,无法长时间重新绘制小部件。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