【发布时间】:2014-05-27 14:21:24
【问题描述】:
我有一个 QT 应用程序,它在启动时更改屏幕分辨率(通过 unix 中的 xrandr 或通过 OSX 上的 CGConfigureDisplayMode)
一旦屏幕分辨率更改完成并成功,应用程序将继续。
然后它使用QApplication::desktop()->screenGeometry(int) 来检索各种屏幕的大小。
问题在于QDesktopWidget::screenGeometry() 返回分辨率更改发生之前的尺寸。
在这个阶段,Qt 事件循环还没有开始。
我当然会在 Qt 事件循环运行后接收QDesktopWidget::resized(int) 信号,然后调用QDesktopWidget::screenGeometry 将返回更新后的维度。但到那时为时已晚。
我可以在接收到信号后强制刷新屏幕,然后重新计算所有内容,但这会产生丑陋的效果,因为您看到窗口首先以错误的尺寸显示,然后再使用正确的尺寸。
所以问题是:
如何确保QDesktopWidget::screenGeometry() 返回实际值,而不是应用程序启动时的值。
【问题讨论】: