我在 PyQt 中有一个项目网格,当用户修改窗口大小时,我需要相应地增加/减少列数。行数由滚动区域处理,所以我不需要担心 y 方向的变化(如果重要的话)。
在我的 QMainWindow 实现中,我知道可以覆盖 resizeEvent() 函数,该函数将在任何和所有窗口调整时触发。但是,每次都使用它来重建网格是非常低效的。只是为了测试该函数以了解它是如何工作的,我让 resizeEvent 仅打印一个字符串,这导致我的窗口调整稍微滞后并且视觉上不完美(抖动而不是平滑)。我可能会对窗口大小运行一个简单的除法运算,看看它是否变大或变小到足以改变列数,但即便如此,每次调整运行一百次时,也可能会导致滞后问题。重建整个网格甚至可能需要一秒钟的时间,所以当用户正在操作窗口时最好不要这样做。
有没有更有效的方法,或者 resizeEvent 是我唯一的选择?理想情况下,我想要一个仅在用户完成调整窗口后触发的事件,而不是在几乎每个像素移动发生时触发的事件(在 1 秒内每次调整可能会触发数百或数千次) .
我正在使用 PyQt5,但如果您更熟悉 PyQt4,我可以在 PyQt5 的上下文中找出您的 PyQt4 解决方案。对于 C++ Qt4/5 解决方案也是如此。