【问题标题】:Qt widget stops receiving painteventsQt 小部件停止接收绘画事件
【发布时间】:2015-09-27 19:23:22
【问题描述】:

我一直在 PySide [source] 中实现康威人生游戏。到目前为止,它工作得很好,直到在某些情况下我还没有弄清楚,我用来显示网格的 QGraphicsView(它由 QGraphicsScene 上的几个 QGraphicsRectItems 组成)突然停止连续绘制。窗口的其余部分保持响应,游戏线程继续运行并发出信号让 ui 更新当前代号。只有当窗口获得焦点时,graphicsView 才会更新大约一秒钟,然后再次冻结。

我觉得这种行为特别奇怪,因为我根本没有覆盖paintEvent,也没有调用重绘/更新方法,但是游戏线程所做的是根据每一代应该具有的状态更新每个 RectItem 的画笔颜色。

关于什么可能导致这种情况的任何想法?

顺便说一句,这是在 Kubuntu 14.04.3 / KWin 4.11.11 / Qt 4.8.6 上

【问题讨论】:

  • 我在 PyQt4 中使用计算繁重的后台线程和 QGraphicsView 时遇到了同样的问题。在 PyQt5 中情况更糟,即使重新获得焦点也不会更新视图,而是需要调整窗口大小:P。您是否找到了比您自己的答案更好的解决方案?

标签: qt pyqt pyside


【解决方案1】:

设法自己解决了!如果有人遇到同样的问题,我需要做的就是通过在每一代调用 qgraphicsscene 的更新方法来安排更新(即在游戏线程中对 graphicsRects 进行操作之后)。

我认为奇怪的行为可能是试图节省 cpu 负载的结果,因为对于 gui 线程没有工作要做!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2012-01-18
    • 2020-09-25
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多