经过数月的尝试、搜索、代码审查等,我仍无法找到一个合适的解决方案来正确定位QT中的新窗口。在最基本的情况下,我只想获得窗口的最终大小,并将其居中于鼠标下方。它将被移动以确保窗口的任何部分都不在屏幕外。我不希望窗口出现后再移动到指定位置,因为这会产生视觉上的瞬间抖动,特别是当桌面FX开启时。
我遇到的问题,其中并非所有问题都有恰当的解决方案:
在窗口显示之前,frameGeometry并没有总是被填充。
frameGeometry有时完全错误,尤其在Windows 7上。
在显示之前,不可能知道sizeHint或size将被应用,或者在它们之间发生了什么变化。也就是说,大小策略似乎不可预测。
请注意,我知道如何保存/恢复先前创建的窗口的几何形状。尽管QT在这方面也存在缺陷,但我已经有了一个可行的解决方案。
还请注意,我不能使用窗口管理器的默认位置。对于多监视器设置中的非MDI应用程序,它们的位置很糟糕(通常甚至不在与鼠标相同的显示器上)。
我还希望避免为了实现解决方案而子类化所有小部件和对话框,因为它不会是通用的。如果这是唯一可能的方法,那么我愿意考虑它(如果事件过滤器也不是一个选项)。
是否有人有好的可行解决方案?