【发布时间】:2017-04-02 07:33:59
【问题描述】:
我正在使用QMdiSubWindow,我想捕获任何试图修改窗口大小/形状/位置的输入,并过滤/修改结果位置和大小,以便小部件与网格对齐。
QResizeEvent 似乎为时已晚,即窗口已经调整大小,布局已经计算,并且通常已经安排了小部件的完整重绘。
resizeEvent 和eventFilter 都只是让我了解刚刚发生的调整大小并在不希望更改时“撤消”它,这对我来说是一个巨大的性能问题(嵌入式设备,图形缓慢)。
我目前正在捕捉QMouseEvents 并修改报告的光标位置,但这很混乱,并没有捕捉到窗口几何形状发生变化的所有情况。
【问题讨论】:
-
如果您想要对小部件几何形状进行这样的控制,
QMdiArea/QMdiSubWindow绝对是最佳选择吗?假设您坚持使用它,您可以创建带有Qt::FramelessWindowHint窗口标志集的QMdiSubWindow,然后自己添加所需的移动/调整大小功能。乏味,但它可能比尝试有选择地禁用某些交互更容易。 -
@G.M.几何是
QWidget的属性,所以任何其他选择都会同样尴尬。我已经对它进行了子类化以捕获和修改鼠标事件,我还替换了我自己的移动和调整大小操作。一切正常,但代码感觉臃肿且奇怪地被黑了。还有一些关于通过任何其他方式更新尺寸的错误。