我使用的是QMdiSubWindow
,我想捕获任何试图修改窗口的大小/形状/位置的输入,并过滤/修改产生的位置和大小,以便小部件与网格对齐。
QResizeEvent
似乎太晚了,即窗口已经调整了大小,布局已经计算好了,并且通常已经计划了一个完整的小部件重绘。
resizeEvent
和eventFilter
都只是让我了解刚刚发生的大小调整和"撤销"它,如果改变是不希望的,这对我来说是一个巨大的性能问题(嵌入式设备,缓慢的图形)。
我目前正在捕获QMouseEvent
s并修改报告的光标位置,但这是混乱的,并不能捕获窗口几何形状变化的所有情况。
如果您通过拖动窗口边框来调整大小,那么您应该捕获像QEvent::NonClientAreaMouseButtonPress
这样的事件,在这里查看更多信息QEvent:类型
例如,您可以安装监视器来检查窗口大小的变化,并设置一个关于NonClientDrag的标志。
但问题是,当用户按下"最大化"按钮或只是一个win+↑
(在WinOS中),在另一方面,这个变化几乎是立即的,所以你不应该担心他们。